[git commit] ash: do not set a signal to SIG_DFL if it already is
Denys Vlasenko
vda.linux at googlemail.com
Sun Aug 6 18:06:19 UTC 2017
commit: https://git.busybox.net/busybox/commit/?id=0f14f41e72d48836a5287d00f05cea236b25be40
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
function old new delta
setsignal 312 338 +26
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
shell/ash.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/shell/ash.c b/shell/ash.c
index e80425f..e8f3ed2 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -366,7 +366,7 @@ struct globals_misc {
#define S_DFL 1 /* default signal handling (SIG_DFL) */
#define S_CATCH 2 /* signal is caught */
#define S_IGN 3 /* signal is ignored (SIG_IGN) */
-#define S_HARD_IGN 4 /* signal is ignored permanently */
+#define S_HARD_IGN 4 /* signal is ignored permanently (it was SIG_IGN on entry to shell) */
/* indicates specified signal received */
uint8_t gotsig[NSIG - 1]; /* offset by 1: "signal" 0 is meaningless */
@@ -3566,6 +3566,12 @@ setsignal(int signo)
cur_act = S_IGN; /* don't hard ignore these */
}
}
+ if (act.sa_handler == SIG_DFL && new_act == S_DFL) {
+ /* installing SIG_DFL over SIG_DFL is a no-op */
+ /* saves one sigaction call in each "sh -c SCRIPT" invocation */
+ *t = S_DFL;
+ return;
+ }
}
if (cur_act == S_HARD_IGN || cur_act == new_act)
return;
More information about the busybox-cvs
mailing list