Describe dummy test model. Work on OpenFlow intro.
[openvswitch] / lib / fatal-signal.c
index ed82173a4ad1cd2727c361b09777e1977e21bb84..7cfbd05393615be04a156bddc8f39457c992cae4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 #include "poll-loop.h"
 #include "shash.h"
 #include "sset.h"
+#include "signals.h"
 #include "socket-util.h"
 #include "util.h"
 #include "vlog.h"
 
+#include "type-props.h"
+
+#ifndef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MAX TYPE_MAXIMUM(sig_atomic_t)
+#endif
+
 VLOG_DEFINE_THIS_MODULE(fatal_signal);
 
 /* Signals to catch. */
@@ -67,11 +74,7 @@ fatal_signal_init(void)
 
         inited = true;
 
-        if (pipe(signal_fds)) {
-            ovs_fatal(errno, "could not create pipe");
-        }
-        set_nonblocking(signal_fds[0]);
-        set_nonblocking(signal_fds[1]);
+        xpipe_nonblocking(signal_fds);
 
         sigemptyset(&fatal_signal_set);
         for (i = 0; i < ARRAY_SIZE(fatal_signals); i++) {
@@ -79,12 +82,10 @@ fatal_signal_init(void)
             struct sigaction old_sa;
 
             sigaddset(&fatal_signal_set, sig_nr);
-            if (sigaction(sig_nr, NULL, &old_sa)) {
-                ovs_fatal(errno, "sigaction");
-            }
+            xsigaction(sig_nr, NULL, &old_sa);
             if (old_sa.sa_handler == SIG_DFL
                 && signal(sig_nr, fatal_signal_handler) == SIG_ERR) {
-                ovs_fatal(errno, "signal");
+                VLOG_FATAL("signal failed (%s)", strerror(errno));
             }
         }
         atexit(atexit_handler);
@@ -149,12 +150,14 @@ fatal_signal_handler(int sig_nr)
 void
 fatal_signal_run(void)
 {
-    int sig_nr;
+    sig_atomic_t sig_nr;
 
     fatal_signal_init();
 
     sig_nr = stored_sig_nr;
     if (sig_nr != SIG_ATOMIC_MAX) {
+        VLOG_WARN("terminating with signal %d (%s)",
+                  (int)sig_nr, signal_name(sig_nr));
         call_hooks(sig_nr);
 
         /* Re-raise the signal with the default handling so that the program