[ovs-dev] [PATCH 1/2] signals: Use sys_siglist[] instead of strsignal() for thread-safety.

Ben Pfaff blp at nicira.com
Wed May 1 18:25:14 UTC 2013


strsignal() isn't thread-safety but sys_siglist[] is.  Also, according to
the glibc manual, BSD has sys_siglist[] but not strsignal().

Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 configure.ac  |    3 ++-
 lib/signals.c |    8 ++++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac
index 7af8afb..8364ea5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -58,9 +58,10 @@ OVS_CHECK_DOT
 OVS_CHECK_IF_PACKET
 OVS_CHECK_IF_DL
 OVS_CHECK_STRTOK_R
+AC_CHECK_DECLS([sys_siglist], [], [], [[#include <signal.h>]])
 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec, struct stat.st_mtimensec],
   [], [], [[#include <sys/stat.h>]])
-AC_CHECK_FUNCS([mlockall strnlen strsignal getloadavg statvfs setmntent])
+AC_CHECK_FUNCS([mlockall strnlen getloadavg statvfs setmntent])
 AC_CHECK_HEADERS([mntent.h sys/statvfs.h linux/types.h linux/if_ether.h])
 
 OVS_CHECK_PKIDIR
diff --git a/lib/signals.c b/lib/signals.c
index 06c2e75..09e0e09 100644
--- a/lib/signals.c
+++ b/lib/signals.c
@@ -147,9 +147,13 @@ const char *
 signal_name(int signum)
 {
     const char *name = NULL;
-#ifdef HAVE_STRSIGNAL
-    name = strsignal(signum);
+
+#if HAVE_DECL_SYS_SIGLIST
+    if (signum >= 0 && signum < ARRAY_SIZE(sys_siglist)) {
+        name = sys_siglist[signum];
+    }
 #endif
+
     if (!name) {
         static char buffer[7 + INT_STRLEN(int) + 1];
         sprintf(buffer, "signal %d", signum);
-- 
1.7.2.5




More information about the dev mailing list