diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-16 18:45:32 +0300 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-16 18:45:32 +0300 |
commit | e440b39416e7876129e619f7aa6935c783020645 (patch) | |
tree | 1507256a61302443f642c3b517a323671441cae8 /mailutils | |
parent | cf686ae3b401c68b64ff997b68b7972881dbf80e (diff) |
*: stop using atexit in non-debug build: saves ~260 in bss with musl
"builtin" below is atexit's 32-element global array of functions to call.
function old new delta
top_main 879 889 +10
launch_helper 185 193 +8
powertop_main 1555 1559 +4
sed_main 651 650 -1
slot 4 - -4
call 4 - -4
atexit 23 - -23
kill_helper 31 - -31
__funcs_on_exit 120 - -120
__cxa_atexit 168 - -168
builtin 260 - -260
------------------------------------------------------------------------------
(add/remove: 0/8 grow/shrink: 3/1 up/down: 22/-611) Total: -589 bytes
text data bss dec hex filename
912364 563 6132 919059 e0613 busybox_old
912035 563 5844 918442 e03aa busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'mailutils')
-rw-r--r-- | mailutils/mail.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/mailutils/mail.c b/mailutils/mail.c index a7e43c0d1..eceb89071 100644 --- a/mailutils/mail.c +++ b/mailutils/mail.c @@ -6,23 +6,15 @@ * * Licensed under GPLv2, see file LICENSE in this source tree. */ +#include <sys/prctl.h> #include "libbb.h" #include "mail.h" -static void kill_helper(void) -{ - if (G.helper_pid > 0) { - kill(G.helper_pid, SIGTERM); - G.helper_pid = 0; - } -} - // generic signal handler static void signal_handler(int signo) { #define err signo if (SIGALRM == signo) { - kill_helper(); bb_error_msg_and_die("timed out"); } @@ -66,16 +58,15 @@ void FAST_FUNC launch_helper(const char **argv) // child stdout [1] -> parent stdin [0] if (!G.helper_pid) { - // child: try to execute connection helper + // child + // if parent dies, get SIGTERM + prctl(PR_SET_PDEATHSIG, SIGTERM, 0, 0, 0); + // try to execute connection helper // NB: SIGCHLD & SIGALRM revert to SIG_DFL on exec BB_EXECVP_or_die((char**)argv); } - // parent - // check whether child is alive - //redundant:signal_handler(SIGCHLD); - // child seems OK -> parent goes on - atexit(kill_helper); + // parent goes on } char* FAST_FUNC send_mail_command(const char *fmt, const char *param) |