diff options
author | Denys Vlasenko | 2021-06-05 16:36:21 +0200 |
---|---|---|
committer | Denys Vlasenko | 2021-06-05 16:36:21 +0200 |
commit | 5a72b0cd74d6de8ed39a9704798ce1118b0995f1 (patch) | |
tree | ed9c9f77b3b7ef7038508da82f649bf297771ab6 /runit | |
parent | 5dadd497ffd9835a2860cf89ad781d1b513803dc (diff) | |
download | busybox-5a72b0cd74d6de8ed39a9704798ce1118b0995f1.zip busybox-5a72b0cd74d6de8ed39a9704798ce1118b0995f1.tar.gz |
runsv: code shrink: use single handler function for SIGTERM and SIGCHLD
function old new delta
s_chld_term - 36 +36
runsv_main 1677 1662 -15
s_child 22 - -22
s_term 29 - -29
------------------------------------------------------------------------------
(add/remove: 1/2 grow/shrink: 0/1 up/down: 36/-66) Total: -30 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'runit')
-rw-r--r-- | runit/runsv.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/runit/runsv.c b/runit/runsv.c index 7fad563..a4b8af4 100644 --- a/runit/runsv.c +++ b/runit/runsv.c @@ -149,20 +149,17 @@ static void warn_cannot(const char *m) warn2_cannot(m, ""); } -/* SIGCHLD/TERM handlers are reentrancy-safe because they are unmasked +/* SIGCHLD/TERM handler is reentrancy-safe because they are unmasked * only over poll() call, not over memory allocations * or printouts. Do not need to save/restore errno either, * as poll() error is not checked there. */ -static void s_child(int sig_no UNUSED_PARAM) +static void s_chld_term(int sig_no) { + if (sig_no == SIGTERM) + sigterm = 1; write(selfpipe.wr, "", 1); } -static void s_term(int sig_no UNUSED_PARAM) -{ - sigterm = 1; - write(selfpipe.wr, "", 1); /* XXX */ -} static int open_trunc_or_warn(const char *name) { @@ -523,8 +520,10 @@ int runsv_main(int argc UNUSED_PARAM, char **argv) * (poll() wouldn't restart regardless of that flag), * we just follow what runit-2.1.2 does: */ - bb_signals_norestart(1 << SIGCHLD, s_child); - bb_signals_norestart(1 << SIGTERM, s_term); + bb_signals_norestart(0 + + (1 << SIGCHLD) + + (1 << SIGTERM) + , s_chld_term); xchdir(dir); /* bss: svd[0].pid = 0; */ |