[git commit] ash: partially sync with dash on "fork if traps are set" logic
Denys Vlasenko
vda.linux at googlemail.com
Thu Oct 27 10:55:09 UTC 2016
commit: https://git.busybox.net/busybox/commit/?id=b4f51d32d288a985019884d79515b1d7a8251529
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
Upstream commit "[EVAL] Force fork if any trap is set, not just on EXIT"
had a similar code as our fix to that bug.
Eliminate some superficial differences.
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
shell/ash.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/shell/ash.c b/shell/ash.c
index 0dd440c..c575e10 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -4660,19 +4660,19 @@ clear_traps(void)
{
char **tp;
+ INT_OFF;
for (tp = trap; tp < &trap[NSIG]; tp++) {
if (*tp && **tp) { /* trap not NULL or "" (SIG_IGN) */
- INT_OFF;
if (trap_ptr == trap)
free(*tp);
/* else: it "belongs" to trap_ptr vector, don't free */
*tp = NULL;
if ((tp - trap) != 0)
setsignal(tp - trap);
- INT_ON;
}
}
may_have_traps = 0;
+ INT_ON;
}
/* Lives far away from here, needed for forkchild */
@@ -12753,12 +12753,13 @@ trapcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
if (action) {
if (LONE_DASH(action))
action = NULL;
- else
+ else {
+ if (action[0]) /* not NULL and not "" and not "-" */
+ may_have_traps = 1;
action = ckstrdup(action);
+ }
}
free(trap[signo]);
- if (action)
- may_have_traps = 1;
trap[signo] = action;
if (signo != 0)
setsignal(signo);
More information about the busybox-cvs
mailing list