ash: slightly better (more correct) code for "trap hack"
function old new delta changepath 194 195 +1 evalvar 1373 1371 -2 forkchild 602 590 -12 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
c297ea97e2
commit
e305c28285
@ -4526,7 +4526,9 @@ clear_traps(void)
|
|||||||
for (tp = trap; tp < &trap[NSIG]; tp++) {
|
for (tp = trap; tp < &trap[NSIG]; tp++) {
|
||||||
if (*tp && **tp) { /* trap not NULL or "" (SIG_IGN) */
|
if (*tp && **tp) { /* trap not NULL or "" (SIG_IGN) */
|
||||||
INT_OFF;
|
INT_OFF;
|
||||||
free(*tp);
|
if (trap_ptr == trap)
|
||||||
|
free(*tp);
|
||||||
|
/* else: it "belongs" to trap_ptr vector, don't free */
|
||||||
*tp = NULL;
|
*tp = NULL;
|
||||||
if ((tp - trap) != 0)
|
if ((tp - trap) != 0)
|
||||||
setsignal(tp - trap);
|
setsignal(tp - trap);
|
||||||
@ -4602,10 +4604,8 @@ forkchild(struct job *jp, union node *n, int mode)
|
|||||||
/* This is needed to prevent EXIT trap firing and such
|
/* This is needed to prevent EXIT trap firing and such
|
||||||
* (trap_ptr will be freed in trapcmd()) */
|
* (trap_ptr will be freed in trapcmd()) */
|
||||||
trap_ptr = memcpy(xmalloc(sizeof(trap)), trap, sizeof(trap));
|
trap_ptr = memcpy(xmalloc(sizeof(trap)), trap, sizeof(trap));
|
||||||
memset(trap, 0, sizeof(trap));
|
|
||||||
} else {
|
|
||||||
clear_traps();
|
|
||||||
}
|
}
|
||||||
|
clear_traps();
|
||||||
#if JOBS
|
#if JOBS
|
||||||
/* do job control only in root shell */
|
/* do job control only in root shell */
|
||||||
doing_jobctl = 0;
|
doing_jobctl = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user