diff --git a/components/lwp/lwp_pid.c b/components/lwp/lwp_pid.c index 79f4e2ec0f7..38d068ee0a5 100644 --- a/components/lwp/lwp_pid.c +++ b/components/lwp/lwp_pid.c @@ -469,13 +469,18 @@ void lwp_free(struct rt_lwp* lwp) if (lwp->tty != RT_NULL) { 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) { + old_lwp = tty_pop(&lwp->tty->head, RT_NULL); 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