*: 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>
This commit is contained in:
@ -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)
|
||||
|
Reference in New Issue
Block a user