diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-18 01:12:57 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-18 01:12:57 +0000 |
commit | 7f0d7ae4f55a810d57ef07d5cd964435dd87e6dc (patch) | |
tree | bb671c9ac416e241e2aff7fabeaa2960f73406dc /shell/ash.c | |
parent | 41aaefce71bfdfb7d788c29e9df90971eecc8193 (diff) |
fix subtle bug inherited from dash
Diffstat (limited to 'shell/ash.c')
-rw-r--r-- | shell/ash.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/shell/ash.c b/shell/ash.c index 95928e992..8ef8c465c 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -11938,7 +11938,11 @@ exitshell(void) TRACE(("pid %d, exitshell(%d)\n", getpid(), status)); if (setjmp(loc.loc)) { if (exception == EXEXIT) - _exit(exitstatus); +/* dash bug: it just does _exit(exitstatus) here + * but we have to do setjobctl(0) first! + * (bug is still not fixed in dash-0.5.3 - if you run dash + * under Midnight Commander, on exit MC is backgrounded) */ + status = exitstatus; goto out; } handler = &loc; @@ -11947,16 +11951,16 @@ exitshell(void) evalstring(p, 0); } flushall(); - setjobctl(0); #ifdef CONFIG_FEATURE_COMMAND_SAVEHISTORY if (iflag && rootshell) { const char *hp = lookupvar("HISTFILE"); - if(hp != NULL ) - save_history ( hp ); + if (hp != NULL) + save_history(hp); } #endif out: + setjobctl(0); _exit(status); /* NOTREACHED */ } |