--- a/src/nexus.c Mon May 04 20:55:43 2009 +0300
+++ b/src/nexus.c Mon May 04 23:19:50 2009 +0300
@@ -495,17 +495,25 @@
memset(nexus, 0, sizeof(*nexus));
}
-static void on_sigint (evutil_socket_t sig, short what, void *arg)
+static void on_sigterm (evutil_socket_t sig, short what, void *arg)
{
struct nexus *nexus = arg;
(void) sig;
(void) what;
- log_info("Quitting...");
-
- // shutdown
- nexus_shutdown(nexus);
+ if (!nexus->shutdown) {
+ // shutdown
+ log_info("Terminating...");
+
+ nexus_shutdown(nexus);
+
+ } else {
+ // already tried to shutdown
+ log_info("Crashing!");
+
+ nexus_crash(nexus);
+ }
}
int main (int argc, char **argv)
@@ -527,11 +535,11 @@
// add our signal handlers
if (signal_ignore(SIGPIPE, &err))
- FATAL_ERROR(&err, "signals_ignore(SIGPIPE)");
+ FATAL_ERROR(&err, "signals_ignore");
- // XXX: add our SIGINT handler after console_init()?
- if ((ERROR_CODE(&err) = signals_add(nexus->signals, SIGINT, &on_sigint, nexus)))
- FATAL_ERROR(&err, "signals_add(SIGINT)");
+ // add our SIGTERM handler before console_init()?
+ if ((ERROR_CODE(&err) = signals_add(nexus->signals, SIGTERM, on_sigterm, nexus)))
+ FATAL_ERROR(&err, "signals_add");
// initialize sock module
@@ -567,6 +575,8 @@
FATAL("event_base_dispatch returned without shutdown");
}
+ } else {
+ log_warn("zero return from event_base_dispatch");
}
// cleanup