Replace all uses of strerror() by ovs_strerror(), for thread safety.
[sliver-openvswitch.git] / lib / fatal-signal.c
index 21ebb5a..1770457 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
  */
 #include <config.h>
 #include "fatal-signal.h"
-#include <assert.h>
 #include <errno.h>
 #include <signal.h>
 #include <stdbool.h>
@@ -74,9 +73,7 @@ fatal_signal_init(void)
 
         inited = true;
 
-        xpipe(signal_fds);
-        xset_nonblocking(signal_fds[0]);
-        xset_nonblocking(signal_fds[1]);
+        xpipe_nonblocking(signal_fds);
 
         sigemptyset(&fatal_signal_set);
         for (i = 0; i < ARRAY_SIZE(fatal_signals); i++) {
@@ -87,7 +84,7 @@ fatal_signal_init(void)
             xsigaction(sig_nr, NULL, &old_sa);
             if (old_sa.sa_handler == SIG_DFL
                 && signal(sig_nr, fatal_signal_handler) == SIG_ERR) {
-                VLOG_FATAL("signal failed (%s)", strerror(errno));
+                VLOG_FATAL("signal failed (%s)", ovs_strerror(errno));
             }
         }
         atexit(atexit_handler);
@@ -114,7 +111,7 @@ fatal_signal_add_hook(void (*hook_cb)(void *aux), void (*cancel_cb)(void *aux),
 {
     fatal_signal_init();
 
-    assert(n_hooks < MAX_HOOKS);
+    ovs_assert(n_hooks < MAX_HOOKS);
     hooks[n_hooks].hook_cb = hook_cb;
     hooks[n_hooks].cancel_cb = cancel_cb;
     hooks[n_hooks].aux = aux;
@@ -158,8 +155,10 @@ fatal_signal_run(void)
 
     sig_nr = stored_sig_nr;
     if (sig_nr != SIG_ATOMIC_MAX) {
+        char namebuf[SIGNAL_NAME_BUFSIZE];
+
         VLOG_WARN("terminating with signal %d (%s)",
-                  (int)sig_nr, signal_name(sig_nr));
+                  (int)sig_nr, signal_name(sig_nr, namebuf, sizeof namebuf));
         call_hooks(sig_nr);
 
         /* Re-raise the signal with the default handling so that the program
@@ -239,7 +238,7 @@ fatal_signal_unlink_file_now(const char *file)
 {
     int error = unlink(file) ? errno : 0;
     if (error) {
-        VLOG_WARN("could not unlink \"%s\" (%s)", file, strerror(error));
+        VLOG_WARN("could not unlink \"%s\" (%s)", file, ovs_strerror(error));
     }
 
     fatal_signal_remove_file_to_unlink(file);