src/nexus.c
changeset 170 1b2f28e26eef
parent 140 aa390e52eda8
child 180 22967b165692
--- 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