diff options
| author | Shell <[email protected]> | 2023-06-28 09:11:17 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-06-28 09:11:17 +0800 |
| commit | b66514686a8745ee36a4384dec044d3ae31d7dcb (patch) | |
| tree | c7b4a68c33fc2fa7ca0dac5bc524797a546717e2 /components/lwp | |
| parent | cb03b8c83422372e1392e729d0989fd15fb902ae (diff) | |
[components/tty] fix bug on foreground app switch (#7726)
Diffstat (limited to 'components/lwp')
| -rw-r--r-- | components/lwp/lwp.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/components/lwp/lwp.c b/components/lwp/lwp.c index a341c1b977..a9e34f0921 100644 --- a/components/lwp/lwp.c +++ b/components/lwp/lwp.c @@ -10,6 +10,7 @@ * 2021-02-03 lizhirui add 64-bit arch support and riscv64 arch support * 2021-08-26 linzhenxing add lwp_setcwd\lwp_getcwd * 2023-02-20 wangxiaoyao inv icache before new app startup + * 2023-02-20 wangxiaoyao fix bug on foreground app switch */ #include <rthw.h> @@ -1250,15 +1251,19 @@ pid_t lwp_execve(char *filename, int debug, int argc, char **argv, char **envp) struct rt_lwp *old_lwp; tty = (struct tty_struct *)console_tty_get(); old_lwp = tty->foreground; - rt_mutex_take(&tty->lock, RT_WAITING_FOREVER); - ret = tty_push(&tty->head, old_lwp); - rt_mutex_release(&tty->lock); - if (ret < 0) + if (old_lwp) { - lwp_tid_put(tid); - lwp_ref_dec(lwp); - LOG_E("malloc fail!\n"); - return -ENOMEM; + rt_mutex_take(&tty->lock, RT_WAITING_FOREVER); + ret = tty_push(&tty->head, old_lwp); + rt_mutex_release(&tty->lock); + + if (ret < 0) + { + lwp_tid_put(tid); + lwp_ref_dec(lwp); + LOG_E("malloc fail!\n"); + return -ENOMEM; + } } lwp->tty = tty; |
