From 22c4e104f68f25d833c52a269117430c410dc59f Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 4 Apr 2013 23:29:59 -0500 Subject: [PATCH] signals: Use sys_siglist[] instead of strsignal() for thread-safety. strsignal() isn't thread-safe but sys_siglist[] is. Also, according to the glibc manual, BSD has sys_siglist[] but not strsignal(). Signed-off-by: Ben Pfaff --- configure.ac | 3 ++- lib/signals.c | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 91f38359d..a691963c0 100644 --- a/configure.ac +++ b/configure.ac @@ -59,10 +59,11 @@ OVS_CHECK_DOT OVS_CHECK_IF_PACKET OVS_CHECK_IF_DL OVS_CHECK_STRTOK_R +AC_CHECK_DECLS([sys_siglist], [], [], [[#include ]]) AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec, struct stat.st_mtimensec], [], [], [[#include ]]) AC_CHECK_MEMBERS([struct ifreq.ifr_flagshigh], [], [], [[#include ]]) -AC_CHECK_FUNCS([mlockall strnlen strsignal getloadavg statvfs getmntent_r]) +AC_CHECK_FUNCS([mlockall strnlen getloadavg statvfs getmntent_r]) AC_CHECK_HEADERS([mntent.h sys/statvfs.h linux/types.h linux/if_ether.h]) AC_CHECK_HEADERS([net/if_mib.h], [], [], [[#include #include ]]) diff --git a/lib/signals.c b/lib/signals.c index f31bc528c..c47fefa4a 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); -- 2.20.1