diff options
| author | Bogdan Purcareata <bogdan.purcareata@freescale.com> | 2013-11-26 13:54:48 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2013-11-26 13:54:48 +0100 |
| commit | 760fc6debcba8cb5ca8d8e2252fac3757c453e11 (patch) | |
| tree | fde19f0e554fd9839a3cfcd2cb20385f6e77c24b /init | |
| parent | cffe28ef876a6fe8a8154321bf5feb409d87cf1a (diff) | |
| download | busybox-w32-760fc6debcba8cb5ca8d8e2252fac3757c453e11.tar.gz busybox-w32-760fc6debcba8cb5ca8d8e2252fac3757c453e11.tar.bz2 busybox-w32-760fc6debcba8cb5ca8d8e2252fac3757c453e11.zip | |
init: halt on SIGPWR too
Most init processes implement a handler for SIGPWR that gracefully
stops all child processes when shutting down a machine. Some other
technologies rely on this signal - e.g. Busybox powered LXC
containers.
This patch makes busybox init halt when receiving SIGPWR.
Signed-off-by: Bogdan Purcareata <bogdan.purcareata@freescale.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'init')
| -rw-r--r-- | init/init.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/init/init.c b/init/init.c index c63bba1ff..d29328c36 100644 --- a/init/init.c +++ b/init/init.c | |||
| @@ -789,7 +789,7 @@ static void run_shutdown_and_kill_processes(void) | |||
| 789 | * and only one will be remembered and acted upon. | 789 | * and only one will be remembered and acted upon. |
| 790 | */ | 790 | */ |
| 791 | 791 | ||
| 792 | /* The SIGUSR[12]/SIGTERM handler */ | 792 | /* The SIGPWR/SIGUSR[12]/SIGTERM handler */ |
| 793 | static void halt_reboot_pwoff(int sig) NORETURN; | 793 | static void halt_reboot_pwoff(int sig) NORETURN; |
| 794 | static void halt_reboot_pwoff(int sig) | 794 | static void halt_reboot_pwoff(int sig) |
| 795 | { | 795 | { |
| @@ -1103,8 +1103,8 @@ int init_main(int argc UNUSED_PARAM, char **argv) | |||
| 1103 | 1103 | ||
| 1104 | /* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined, | 1104 | /* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined, |
| 1105 | * then parse_inittab() simply adds in some default | 1105 | * then parse_inittab() simply adds in some default |
| 1106 | * actions(i.e., INIT_SCRIPT and a pair | 1106 | * actions (i.e., INIT_SCRIPT and a pair |
| 1107 | * of "askfirst" shells */ | 1107 | * of "askfirst" shells) */ |
| 1108 | parse_inittab(); | 1108 | parse_inittab(); |
| 1109 | } | 1109 | } |
| 1110 | 1110 | ||
| @@ -1135,6 +1135,7 @@ int init_main(int argc UNUSED_PARAM, char **argv) | |||
| 1135 | struct sigaction sa; | 1135 | struct sigaction sa; |
| 1136 | 1136 | ||
| 1137 | bb_signals(0 | 1137 | bb_signals(0 |
| 1138 | + (1 << SIGPWR) /* halt */ | ||
| 1138 | + (1 << SIGUSR1) /* halt */ | 1139 | + (1 << SIGUSR1) /* halt */ |
| 1139 | + (1 << SIGTERM) /* reboot */ | 1140 | + (1 << SIGTERM) /* reboot */ |
| 1140 | + (1 << SIGUSR2) /* poweroff */ | 1141 | + (1 << SIGUSR2) /* poweroff */ |
