diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-31 01:02:07 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-31 01:02:07 +0000 |
commit | cab28aa7de336b0a39ef43ce0eb035a2cab30d4d (patch) | |
tree | 1f42544e65cd60dea87e631942506f1a5b206823 | |
parent | 6c62246a3598efd3d1e9264f8d9f44d8d93a6453 (diff) | |
download | busybox-w32-cab28aa7de336b0a39ef43ce0eb035a2cab30d4d.tar.gz busybox-w32-cab28aa7de336b0a39ef43ce0eb035a2cab30d4d.tar.bz2 busybox-w32-cab28aa7de336b0a39ef43ce0eb035a2cab30d4d.zip |
init: preparatory patch, no code changes
-rw-r--r-- | include/libbb.h | 4 | ||||
-rw-r--r-- | init/init.c | 44 | ||||
-rw-r--r-- | libbb/signals.c | 2 | ||||
-rw-r--r-- | runit/runsv.c | 4 | ||||
-rw-r--r-- | runit/svlogd.c | 8 |
5 files changed, 31 insertions, 31 deletions
diff --git a/include/libbb.h b/include/libbb.h index e1a6d120b..0403281c6 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -353,8 +353,8 @@ enum { | |||
353 | void bb_signals(int sigs, void (*f)(int)) FAST_FUNC; | 353 | void bb_signals(int sigs, void (*f)(int)) FAST_FUNC; |
354 | /* Unlike signal() and bb_signals, sets handler with sigaction() | 354 | /* Unlike signal() and bb_signals, sets handler with sigaction() |
355 | * and in a way that while signal handler is run, no other signals | 355 | * and in a way that while signal handler is run, no other signals |
356 | * will be blocked: */ | 356 | * will be blocked; syscalls will not be restarted: */ |
357 | void bb_signals_recursive(int sigs, void (*f)(int)) FAST_FUNC; | 357 | void bb_signals_recursive_norestart(int sigs, void (*f)(int)) FAST_FUNC; |
358 | /* syscalls like read() will be interrupted with EINTR: */ | 358 | /* syscalls like read() will be interrupted with EINTR: */ |
359 | void signal_no_SA_RESTART_empty_mask(int sig, void (*handler)(int)) FAST_FUNC; | 359 | void signal_no_SA_RESTART_empty_mask(int sig, void (*handler)(int)) FAST_FUNC; |
360 | /* syscalls like read() won't be interrupted (though select/poll will be): */ | 360 | /* syscalls like read() won't be interrupted (though select/poll will be): */ |
diff --git a/init/init.c b/init/init.c index cea30c99f..6af6830e4 100644 --- a/init/init.c +++ b/init/init.c | |||
@@ -65,18 +65,6 @@ enum { | |||
65 | 65 | ||
66 | static void halt_reboot_pwoff(int sig) NORETURN; | 66 | static void halt_reboot_pwoff(int sig) NORETURN; |
67 | 67 | ||
68 | static void waitfor(pid_t pid) | ||
69 | { | ||
70 | /* waitfor(run(x)): protect against failed fork inside run() */ | ||
71 | if (pid <= 0) | ||
72 | return; | ||
73 | |||
74 | /* Wait for any child (prevent zombies from exiting orphaned processes) | ||
75 | * but exit the loop only when specified one has exited. */ | ||
76 | while (wait(NULL) != pid) | ||
77 | continue; | ||
78 | } | ||
79 | |||
80 | static void loop_forever(void) NORETURN; | 68 | static void loop_forever(void) NORETURN; |
81 | static void loop_forever(void) | 69 | static void loop_forever(void) |
82 | { | 70 | { |
@@ -476,6 +464,18 @@ static void delete_init_action(struct init_action *action) | |||
476 | } | 464 | } |
477 | } | 465 | } |
478 | 466 | ||
467 | static void waitfor(pid_t pid) | ||
468 | { | ||
469 | /* waitfor(run(x)): protect against failed fork inside run() */ | ||
470 | if (pid <= 0) | ||
471 | return; | ||
472 | |||
473 | /* Wait for any child (prevent zombies from exiting orphaned processes) | ||
474 | * but exit the loop only when specified one has exited. */ | ||
475 | while (wait(NULL) != pid) | ||
476 | continue; | ||
477 | } | ||
478 | |||
479 | /* Run all commands of a particular type */ | 479 | /* Run all commands of a particular type */ |
480 | static void run_actions(int action_type) | 480 | static void run_actions(int action_type) |
481 | { | 481 | { |
@@ -507,7 +507,7 @@ static void run_actions(int action_type) | |||
507 | } | 507 | } |
508 | } | 508 | } |
509 | 509 | ||
510 | static void init_reboot(unsigned long magic) | 510 | static void low_level_reboot(unsigned long magic) |
511 | { | 511 | { |
512 | pid_t pid; | 512 | pid_t pid; |
513 | /* We have to fork here, since the kernel calls do_exit(EXIT_SUCCESS) in | 513 | /* We have to fork here, since the kernel calls do_exit(EXIT_SUCCESS) in |
@@ -534,7 +534,7 @@ static void kill_all_processes(void) | |||
534 | message(L_CONSOLE | L_LOG, "The system is going down NOW!"); | 534 | message(L_CONSOLE | L_LOG, "The system is going down NOW!"); |
535 | 535 | ||
536 | /* Allow Ctrl-Alt-Del to reboot system. */ | 536 | /* Allow Ctrl-Alt-Del to reboot system. */ |
537 | init_reboot(RB_ENABLE_CAD); | 537 | low_level_reboot(RB_ENABLE_CAD); |
538 | 538 | ||
539 | /* Send signals to every process _except_ pid 1 */ | 539 | /* Send signals to every process _except_ pid 1 */ |
540 | message(L_CONSOLE | L_LOG, "Sending SIG%s to all processes", "TERM"); | 540 | message(L_CONSOLE | L_LOG, "Sending SIG%s to all processes", "TERM"); |
@@ -566,13 +566,13 @@ static void halt_reboot_pwoff(int sig) | |||
566 | message(L_CONSOLE | L_LOG, "Requesting system %s", m); | 566 | message(L_CONSOLE | L_LOG, "Requesting system %s", m); |
567 | /* allow time for last message to reach serial console */ | 567 | /* allow time for last message to reach serial console */ |
568 | sleep(2); | 568 | sleep(2); |
569 | init_reboot(rb); | 569 | low_level_reboot(rb); |
570 | loop_forever(); | 570 | loop_forever(); |
571 | } | 571 | } |
572 | 572 | ||
573 | /* Handler for QUIT - exec "restart" action, | 573 | /* Handler for QUIT - exec "restart" action, |
574 | * else (no such action defined) do nothing */ | 574 | * else (no such action defined) do nothing */ |
575 | static void exec_restart_action(int sig UNUSED_PARAM) | 575 | static void restart_handler(int sig UNUSED_PARAM) |
576 | { | 576 | { |
577 | struct init_action *a; | 577 | struct init_action *a; |
578 | 578 | ||
@@ -589,7 +589,7 @@ static void exec_restart_action(int sig UNUSED_PARAM) | |||
589 | messageD(L_CONSOLE | L_LOG, "Trying to re-exec %s", a->command); | 589 | messageD(L_CONSOLE | L_LOG, "Trying to re-exec %s", a->command); |
590 | init_exec(a->command); | 590 | init_exec(a->command); |
591 | sleep(2); | 591 | sleep(2); |
592 | init_reboot(RB_HALT_SYSTEM); | 592 | low_level_reboot(RB_HALT_SYSTEM); |
593 | loop_forever(); | 593 | loop_forever(); |
594 | } | 594 | } |
595 | } | 595 | } |
@@ -723,7 +723,7 @@ static void parse_inittab(void) | |||
723 | } | 723 | } |
724 | 724 | ||
725 | #if ENABLE_FEATURE_USE_INITTAB | 725 | #if ENABLE_FEATURE_USE_INITTAB |
726 | static void reload_signal(int sig UNUSED_PARAM) | 726 | static void reload_inittab(int sig UNUSED_PARAM) |
727 | { | 727 | { |
728 | struct init_action *a, *tmp; | 728 | struct init_action *a, *tmp; |
729 | 729 | ||
@@ -769,7 +769,7 @@ static void reload_signal(int sig UNUSED_PARAM) | |||
769 | run_actions(RESPAWN | ASKFIRST); | 769 | run_actions(RESPAWN | ASKFIRST); |
770 | } | 770 | } |
771 | #else | 771 | #else |
772 | void reload_signal(int sig); | 772 | void reload_inittab(int sig); |
773 | #endif | 773 | #endif |
774 | 774 | ||
775 | int init_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 775 | int init_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
@@ -797,7 +797,7 @@ int init_main(int argc UNUSED_PARAM, char **argv) | |||
797 | // Move signal handling from handlers to main loop - | 797 | // Move signal handling from handlers to main loop - |
798 | // we have bad races otherwise. | 798 | // we have bad races otherwise. |
799 | // E.g. parse_inittab() vs. delete_init_action()... | 799 | // E.g. parse_inittab() vs. delete_init_action()... |
800 | signal(SIGQUIT, exec_restart_action); | 800 | signal(SIGQUIT, restart_handler); |
801 | bb_signals(0 | 801 | bb_signals(0 |
802 | + (1 << SIGUSR1) /* halt */ | 802 | + (1 << SIGUSR1) /* halt */ |
803 | + (1 << SIGUSR2) /* poweroff */ | 803 | + (1 << SIGUSR2) /* poweroff */ |
@@ -812,7 +812,7 @@ int init_main(int argc UNUSED_PARAM, char **argv) | |||
812 | 812 | ||
813 | /* Turn off rebooting via CTL-ALT-DEL -- we get a | 813 | /* Turn off rebooting via CTL-ALT-DEL -- we get a |
814 | * SIGINT on CAD so we can shut things down gracefully... */ | 814 | * SIGINT on CAD so we can shut things down gracefully... */ |
815 | init_reboot(RB_DISABLE_CAD); | 815 | low_level_reboot(RB_DISABLE_CAD); |
816 | } | 816 | } |
817 | 817 | ||
818 | /* Figure out where the default console should be */ | 818 | /* Figure out where the default console should be */ |
@@ -900,7 +900,7 @@ int init_main(int argc UNUSED_PARAM, char **argv) | |||
900 | run_actions(ONCE); | 900 | run_actions(ONCE); |
901 | 901 | ||
902 | /* Redefine SIGHUP to reread /etc/inittab */ | 902 | /* Redefine SIGHUP to reread /etc/inittab */ |
903 | signal(SIGHUP, ENABLE_FEATURE_USE_INITTAB ? reload_signal : SIG_IGN); | 903 | signal(SIGHUP, ENABLE_FEATURE_USE_INITTAB ? reload_inittab : SIG_IGN); |
904 | 904 | ||
905 | /* Now run the looping stuff for the rest of forever */ | 905 | /* Now run the looping stuff for the rest of forever */ |
906 | while (1) { | 906 | while (1) { |
diff --git a/libbb/signals.c b/libbb/signals.c index f56ce65a8..a528756ff 100644 --- a/libbb/signals.c +++ b/libbb/signals.c | |||
@@ -47,7 +47,7 @@ void FAST_FUNC bb_signals(int sigs, void (*f)(int)) | |||
47 | } | 47 | } |
48 | } | 48 | } |
49 | 49 | ||
50 | void FAST_FUNC bb_signals_recursive(int sigs, void (*f)(int)) | 50 | void FAST_FUNC bb_signals_recursive_norestart(int sigs, void (*f)(int)) |
51 | { | 51 | { |
52 | int sig_no = 0; | 52 | int sig_no = 0; |
53 | int bit = 1; | 53 | int bit = 1; |
diff --git a/runit/runsv.c b/runit/runsv.c index 123720864..f83d58283 100644 --- a/runit/runsv.c +++ b/runit/runsv.c | |||
@@ -455,9 +455,9 @@ int runsv_main(int argc UNUSED_PARAM, char **argv) | |||
455 | ndelay_on(selfpipe.wr); | 455 | ndelay_on(selfpipe.wr); |
456 | 456 | ||
457 | sig_block(SIGCHLD); | 457 | sig_block(SIGCHLD); |
458 | bb_signals_recursive(1 << SIGCHLD, s_child); | 458 | bb_signals_recursive_norestart(1 << SIGCHLD, s_child); |
459 | sig_block(SIGTERM); | 459 | sig_block(SIGTERM); |
460 | bb_signals_recursive(1 << SIGTERM, s_term); | 460 | bb_signals_recursive_norestart(1 << SIGTERM, s_term); |
461 | 461 | ||
462 | xchdir(dir); | 462 | xchdir(dir); |
463 | /* bss: svd[0].pid = 0; */ | 463 | /* bss: svd[0].pid = 0; */ |
diff --git a/runit/svlogd.c b/runit/svlogd.c index 9beb9f53f..9609fa37c 100644 --- a/runit/svlogd.c +++ b/runit/svlogd.c | |||
@@ -912,10 +912,10 @@ int svlogd_main(int argc, char **argv) | |||
912 | sigaddset(&blocked_sigset, SIGALRM); | 912 | sigaddset(&blocked_sigset, SIGALRM); |
913 | sigaddset(&blocked_sigset, SIGHUP); | 913 | sigaddset(&blocked_sigset, SIGHUP); |
914 | sigprocmask(SIG_BLOCK, &blocked_sigset, NULL); | 914 | sigprocmask(SIG_BLOCK, &blocked_sigset, NULL); |
915 | bb_signals_recursive(1 << SIGTERM, sig_term_handler); | 915 | bb_signals_recursive_norestart(1 << SIGTERM, sig_term_handler); |
916 | bb_signals_recursive(1 << SIGCHLD, sig_child_handler); | 916 | bb_signals_recursive_norestart(1 << SIGCHLD, sig_child_handler); |
917 | bb_signals_recursive(1 << SIGALRM, sig_alarm_handler); | 917 | bb_signals_recursive_norestart(1 << SIGALRM, sig_alarm_handler); |
918 | bb_signals_recursive(1 << SIGHUP, sig_hangup_handler); | 918 | bb_signals_recursive_norestart(1 << SIGHUP, sig_hangup_handler); |
919 | 919 | ||
920 | logdirs_reopen(); | 920 | logdirs_reopen(); |
921 | 921 | ||