1
0
Эх сурвалжийг харах

fix lwp_free tty switch to foreground error (#7945)

geniusgogo 2 жил өмнө
parent
commit
a6959a9ef8

+ 8 - 3
components/lwp/lwp_pid.c

@@ -469,13 +469,18 @@ void lwp_free(struct rt_lwp* lwp)
         if (lwp->tty != RT_NULL)
         if (lwp->tty != RT_NULL)
         {
         {
             rt_mutex_take(&lwp->tty->lock, RT_WAITING_FOREVER);
             rt_mutex_take(&lwp->tty->lock, RT_WAITING_FOREVER);
-            old_lwp = tty_pop(&lwp->tty->head, RT_NULL);
-            rt_mutex_release(&lwp->tty->lock);
             if (lwp->tty->foreground == lwp)
             if (lwp->tty->foreground == lwp)
             {
             {
+                old_lwp = tty_pop(&lwp->tty->head, RT_NULL);
                 lwp->tty->foreground = old_lwp;
                 lwp->tty->foreground = old_lwp;
-                lwp->tty = RT_NULL;
             }
             }
+            else
+            {
+                tty_pop(&lwp->tty->head, lwp);
+            }
+            rt_mutex_release(&lwp->tty->lock);
+
+            lwp->tty = RT_NULL;
         }
         }
     }
     }
     else
     else