ash: do not let EXIT trap to fire in trap

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-09-24 03:09:26 +02:00
parent 7188540257
commit 0800e3af75

View File

@ -4525,7 +4525,7 @@ clear_traps(void)
INT_OFF;
free(*tp);
*tp = NULL;
if (tp != &trap[0])
if ((tp - trap) != 0)
setsignal(tp - trap);
INT_ON;
}
@ -4596,6 +4596,8 @@ forkchild(struct job *jp, union node *n, int mode)
*
* Our solution: ONLY bare $(trap) or `trap` is special.
*/
free(trap[0]); /* Prevent EXIT trap from firing in `trap` */
trap[0] = NULL;
} else {
clear_traps();
}
@ -13023,6 +13025,7 @@ exitshell(void)
if (p) {
trap[0] = NULL;
evalstring(p, 0);
free(p);
}
flush_stdout_stderr();
out: