jail: always call cgroups_free()
[project/procd.git] / signal.c
index 16824f7251b5c01344c4f1dd939ed0daef9ac022..9974153200a48b649f965bdd867fb7fc2a0b9d2c 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -35,6 +35,7 @@ static void signal_shutdown(int signal, siginfo_t *siginfo, void *data)
        int event = 0;
        char *msg = NULL;
 
+#ifndef DISABLE_INIT
        switch(signal) {
        case SIGINT:
        case SIGTERM:
@@ -43,10 +44,12 @@ static void signal_shutdown(int signal, siginfo_t *siginfo, void *data)
                break;
        case SIGUSR1:
        case SIGUSR2:
+       case SIGPWR:
                event = RB_POWER_OFF;
                msg = "poweroff";
                break;
        }
+#endif
 
        DEBUG(1, "Triggering %s\n", msg);
        if (event)
@@ -88,10 +91,13 @@ void procd_signal(void)
        sigaction(SIGINT, &sa_shutdown, NULL);
        sigaction(SIGUSR1, &sa_shutdown, NULL);
        sigaction(SIGUSR2, &sa_shutdown, NULL);
+       sigaction(SIGPWR, &sa_shutdown, NULL);
        sigaction(SIGSEGV, &sa_crash, NULL);
        sigaction(SIGBUS, &sa_crash, NULL);
        sigaction(SIGHUP, &sa_dummy, NULL);
        sigaction(SIGKILL, &sa_dummy, NULL);
        sigaction(SIGSTOP, &sa_dummy, NULL);
+#ifndef DISABLE_INIT
        reboot(RB_DISABLE_CAD);
+#endif
 }