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>
This commit is contained in:
Bogdan Purcareata 2013-11-26 13:54:48 +01:00 committed by Denys Vlasenko
parent cffe28ef87
commit 760fc6debc

View File

@ -789,7 +789,7 @@ static void run_shutdown_and_kill_processes(void)
* and only one will be remembered and acted upon. * and only one will be remembered and acted upon.
*/ */
/* The SIGUSR[12]/SIGTERM handler */ /* The SIGPWR/SIGUSR[12]/SIGTERM handler */
static void halt_reboot_pwoff(int sig) NORETURN; static void halt_reboot_pwoff(int sig) NORETURN;
static void halt_reboot_pwoff(int sig) static void halt_reboot_pwoff(int sig)
{ {
@ -1103,8 +1103,8 @@ int init_main(int argc UNUSED_PARAM, char **argv)
/* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined, /* NOTE that if CONFIG_FEATURE_USE_INITTAB is NOT defined,
* then parse_inittab() simply adds in some default * then parse_inittab() simply adds in some default
* actions(i.e., INIT_SCRIPT and a pair * actions (i.e., INIT_SCRIPT and a pair
* of "askfirst" shells */ * of "askfirst" shells) */
parse_inittab(); parse_inittab();
} }
@ -1135,6 +1135,7 @@ int init_main(int argc UNUSED_PARAM, char **argv)
struct sigaction sa; struct sigaction sa;
bb_signals(0 bb_signals(0
+ (1 << SIGPWR) /* halt */
+ (1 << SIGUSR1) /* halt */ + (1 << SIGUSR1) /* halt */
+ (1 << SIGTERM) /* reboot */ + (1 << SIGTERM) /* reboot */
+ (1 << SIGUSR2) /* poweroff */ + (1 << SIGUSR2) /* poweroff */