Fix ctrl+alt+del support
[project/procd.git] / signal.c
index 0bb881e..16824f7 100644 (file)
--- a/signal.c
+++ b/signal.c
 
 #include "procd.h"
 
-static int preinit;
-
 static void do_reboot(void)
 {
        LOG("reboot\n");
        fflush(stderr);
        sync();
+       sleep(2);
        reboot(RB_AUTOBOOT);
        while (1)
        ;
@@ -36,10 +35,8 @@ static void signal_shutdown(int signal, siginfo_t *siginfo, void *data)
        int event = 0;
        char *msg = NULL;
 
-       if (preinit)
-               do_reboot();
-
        switch(signal) {
+       case SIGINT:
        case SIGTERM:
                event = RB_AUTOBOOT;
                msg = "reboot";
@@ -88,6 +85,7 @@ void procd_signal(void)
        if (getpid() != 1)
                return;
        sigaction(SIGTERM, &sa_shutdown, NULL);
+       sigaction(SIGINT, &sa_shutdown, NULL);
        sigaction(SIGUSR1, &sa_shutdown, NULL);
        sigaction(SIGUSR2, &sa_shutdown, NULL);
        sigaction(SIGSEGV, &sa_crash, NULL);
@@ -95,12 +93,5 @@ void procd_signal(void)
        sigaction(SIGHUP, &sa_dummy, NULL);
        sigaction(SIGKILL, &sa_dummy, NULL);
        sigaction(SIGSTOP, &sa_dummy, NULL);
-}
-
-void procd_signal_preinit(void)
-{
-       preinit = 1;
-       sigaction(SIGTERM, &sa_shutdown, NULL);
-       sigaction(SIGUSR1, &sa_shutdown, NULL);
-       sigaction(SIGUSR2, &sa_shutdown, NULL);
+       reboot(RB_DISABLE_CAD);
 }