*: stop using atexit in non-debug build: saves ~260 in bss with musl
No binary (build failed)
—
(log yok)
| @@ -1521,7 +1521,7 @@ int sed_main(int argc UNUSED_PARAM, char **argv) | |
| //argc -= optind; | |
| argv += optind; | |
| if (opt & OPT_in_place) { // -i | |
| - | atexit(cleanup_outname); |
| + | die_func = cleanup_outname; |
| } | |
| if (opt & (2|4)) | |
| G.regex_type |= REG_EXTENDED; // -r or -E | |
| @@ -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) | |
| @@ -8,11 +8,6 @@ | |
| * | |
| * Licensed under GPLv2, see file LICENSE in this source tree. | |
| */ | |
| - | |
| - | //applet:IF_POWERTOP(APPLET(powertop, BB_DIR_USR_SBIN, BB_SUID_DROP)) |
| - | |
| - | //kbuild:lib-$(CONFIG_POWERTOP) += powertop.o |
| - | |
| //config:config POWERTOP | |
| //config: bool "powertop (9.1 kb)" | |
| //config: default y | |
| @@ -27,6 +22,10 @@ | |
| //config: Without this, powertop will only refresh display every 10 seconds. | |
| //config: No keyboard commands will work, only ^C to terminate. | |
| + | //applet:IF_POWERTOP(APPLET(powertop, BB_DIR_USR_SBIN, BB_SUID_DROP)) |
| + | |
| + | //kbuild:lib-$(CONFIG_POWERTOP) += powertop.o |
| + | |
| // XXX This should be configurable | |
| #define ENABLE_FEATURE_POWERTOP_PROCIRQ 1 | |
| @@ -718,7 +717,7 @@ int powertop_main(int UNUSED_PARAM argc, char UNUSED_PARAM **argv) | |
| set_termios_to_raw(STDIN_FILENO, &G.init_settings, TERMIOS_CLEAR_ISIG); | |
| bb_signals(BB_FATAL_SIGS, sig_handler); | |
| /* So we don't forget to reset term settings */ | |
| - | atexit(reset_term); |
| + | die_func = reset_term; |
| #endif | |
| /* Collect initial data */ | |
| @@ -855,6 +854,9 @@ int powertop_main(int UNUSED_PARAM argc, char UNUSED_PARAM **argv) | |
| } /* for (;;) */ | |
| bb_putchar('\n'); | |
| + | #if ENABLE_FEATURE_POWERTOP_INTERACTIVE |
| + | reset_term(); |
| + | #endif |
| return EXIT_SUCCESS; | |
| } | |
| @@ -1146,6 +1146,7 @@ int top_main(int argc UNUSED_PARAM, char **argv) | |
| else { | |
| /* Turn on unbuffered input; turn off echoing, ^C ^Z etc */ | |
| set_termios_to_raw(STDIN_FILENO, &initial_settings, TERMIOS_CLEAR_ISIG); | |
| + | die_func = reset_term; |
| } | |
| bb_signals(BB_FATAL_SIGS, sig_catcher); | |