aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash.c5
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)
4525 INT_OFF; 4525 INT_OFF;
4526 free(*tp); 4526 free(*tp);
4527 *tp = NULL; 4527 *tp = NULL;
4528 if (tp != &trap[0]) 4528 if ((tp - trap) != 0)
4529 setsignal(tp - trap); 4529 setsignal(tp - trap);
4530 INT_ON; 4530 INT_ON;
4531 } 4531 }
@@ -4596,6 +4596,8 @@ forkchild(struct job *jp, union node *n, int mode)
4596 * 4596 *
4597 * Our solution: ONLY bare $(trap) or `trap` is special. 4597 * Our solution: ONLY bare $(trap) or `trap` is special.
4598 */ 4598 */
4599 free(trap[0]); /* Prevent EXIT trap from firing in `trap` */
4600 trap[0] = NULL;
4599 } else { 4601 } else {
4600 clear_traps(); 4602 clear_traps();
4601 } 4603 }
@@ -13023,6 +13025,7 @@ exitshell(void)
13023 if (p) { 13025 if (p) {
13024 trap[0] = NULL; 13026 trap[0] = NULL;
13025 evalstring(p, 0); 13027 evalstring(p, 0);
13028 free(p);
13026 } 13029 }
13027 flush_stdout_stderr(); 13030 flush_stdout_stderr();
13028 out: 13031 out: