diff options
-rw-r--r-- | shell/ash.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c index 597bc2808..47f968b54 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -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: |