X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=signal.c;h=16824f7251b5c01344c4f1dd939ed0daef9ac022;hp=f705e5d2a091729240b66877a4934127a3178a48;hb=6c880d28c9fb8d87c3a42b81e7659b7666c78976;hpb=9961e88dd853a30503298378679d2cedc497410e diff --git a/signal.c b/signal.c index f705e5d..16824f7 100644 --- a/signal.c +++ b/signal.c @@ -19,14 +19,12 @@ #include "procd.h" -static int preinit; - static void do_reboot(void) { LOG("reboot\n"); fflush(stderr); sync(); - sleep(1); + sleep(2); reboot(RB_AUTOBOOT); while (1) ; @@ -37,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"; @@ -85,10 +81,11 @@ struct sigaction sa_dummy = { void procd_signal(void) { - sigaction(SIGPIPE, &sa_dummy, NULL); + signal(SIGPIPE, SIG_IGN); 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); @@ -96,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); }