void Openbox::signalHandler(int signal)
{
switch (signal) {
- case SIGHUP:
- // XXX: Do something with HUP? Really shouldn't, we get this when X shuts
- // down and hangs-up on us. we also get a SIGPIPE.
- printf("Caught HUP signal. Restarting.\n");
+ case SIGUSR1:
+ printf("Caught SIGUSR1 signal. Restarting.\n");
instance->restart();
break;
-
+
+ case SIGHUP:
case SIGINT:
case SIGTERM:
case SIGPIPE:
printf("Caught signal %d. Exiting.\n", signal);
instance->shutdown();
break;
+
case SIGFPE:
case SIGSEGV:
printf("Caught signal %d. Aborting and dumping core.\n", signal);
action.sa_handler = Openbox::signalHandler;
action.sa_mask = sigset_t();
action.sa_flags = SA_NOCLDSTOP | SA_NODEFER;
+ sigaction(SIGUSR1, &action, (struct sigaction *) 0);
sigaction(SIGPIPE, &action, (struct sigaction *) 0);
sigaction(SIGSEGV, &action, (struct sigaction *) 0);
sigaction(SIGFPE, &action, (struct sigaction *) 0);