[PATCH xserver 1/5] dix: Use OsSignal() not signal()

Adam Jackson ajax at redhat.com
Tue Jun 7 19:52:11 UTC 2016


As the man page for the latter states:

    The effects of signal() in a multithreaded process are unspecified.

We already have an interface to call sigaction() instead, use it.

Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 Xext/shm.c                              |  5 ++---
 Xext/xf86bigfont.c                      |  6 ++----
 hw/dmx/input/lnx-keyboard.c             |  5 ++---
 hw/kdrive/ephyr/ephyr.h                 |  1 -
 hw/kdrive/linux/linux.c                 |  1 -
 hw/kdrive/src/kdrive.c                  |  2 --
 hw/kdrive/src/kinput.c                  |  1 -
 hw/xfree86/common/xf86Init.c            | 18 +++++++++---------
 hw/xfree86/os-support/bsd/bsd_init.c    |  2 +-
 hw/xfree86/os-support/linux/lnx_init.c  |  2 +-
 hw/xfree86/os-support/shared/VTsw_usl.c |  2 +-
 hw/xfree86/parser/write.c               |  5 ++---
 include/globals.h                       |  2 --
 os/utils.c                              |  4 ++--
 14 files changed, 22 insertions(+), 34 deletions(-)

diff --git a/Xext/shm.c b/Xext/shm.c
index b359a90..0a44b76 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -153,7 +153,6 @@ static ShmFuncs fbFuncs = { fbShmCreatePixmap, NULL };
 }
 
 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__DragonFly__)
-#include <sys/signal.h>
 
 static Bool badSysCall = FALSE;
 
@@ -170,7 +169,7 @@ CheckForShmSyscall(void)
     int shmid = -1;
 
     /* If no SHM support in the kernel, the bad syscall will generate SIGSYS */
-    oldHandler = signal(SIGSYS, SigSysHandler);
+    oldHandler = OsSignal(SIGSYS, SigSysHandler);
 
     badSysCall = FALSE;
     shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT);
@@ -183,7 +182,7 @@ CheckForShmSyscall(void)
         /* Allocation failed */
         badSysCall = TRUE;
     }
-    signal(SIGSYS, oldHandler);
+    OsSignal(SIGSYS, oldHandler);
     return !badSysCall;
 }
 
diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c
index 95b5371..97596ea 100644
--- a/Xext/xf86bigfont.c
+++ b/Xext/xf86bigfont.c
@@ -96,8 +96,6 @@ static Bool badSysCall = FALSE;
 
 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__DragonFly__)
 
-#include <sys/signal.h>
-
 static void
 SigSysHandler(int signo)
 {
@@ -111,7 +109,7 @@ CheckForShmSyscall(void)
     int shmid = -1;
 
     /* If no SHM support in the kernel, the bad syscall will generate SIGSYS */
-    oldHandler = signal(SIGSYS, SigSysHandler);
+    oldHandler = OsSignal(SIGSYS, SigSysHandler);
 
     badSysCall = FALSE;
     shmid = shmget(IPC_PRIVATE, 4096, IPC_CREAT);
@@ -123,7 +121,7 @@ CheckForShmSyscall(void)
         /* Allocation failed */
         badSysCall = TRUE;
     }
-    signal(SIGSYS, oldHandler);
+    OsSignal(SIGSYS, oldHandler);
     return !badSysCall;
 }
 
diff --git a/hw/dmx/input/lnx-keyboard.c b/hw/dmx/input/lnx-keyboard.c
index 0aa62f4..2a5ce79 100644
--- a/hw/dmx/input/lnx-keyboard.c
+++ b/hw/dmx/input/lnx-keyboard.c
@@ -158,7 +158,6 @@
 #include <X11/Xos.h>
 #include <sys/ioctl.h>
 #include <errno.h>
-#include <signal.h>
 #include <sys/vt.h>
 #include <sys/kd.h>
 #include <termios.h>
@@ -505,7 +504,7 @@ kbdLinuxVTSignalHandler(int sig)
 {
     myPrivate *priv = PRIV;
 
-    signal(sig, kbdLinuxVTSignalHandler);
+    OsSignal(sig, kbdLinuxVTSignalHandler);
     if (priv) {
         ioctl(priv->fd, VT_RELDISP, VT_ACKACQ);
         priv->switched = !priv->switched;
@@ -537,7 +536,7 @@ kbdLinuxActivate(int fd, int vtno, int setSig)
         VT.acqsig = SIGUSR1;
         if (ioctl(fd, VT_SETMODE, &VT))
             FATAL0("kbdLinuxActivate: VT_SETMODE VT_PROCESS failed\n");
-        signal(SIGUSR1, kbdLinuxVTSignalHandler);
+        OsSignal(SIGUSR1, kbdLinuxVTSignalHandler);
     }
     return Success;
 }
diff --git a/hw/kdrive/ephyr/ephyr.h b/hw/kdrive/ephyr/ephyr.h
index f5015f6..7723bf1 100644
--- a/hw/kdrive/ephyr/ephyr.h
+++ b/hw/kdrive/ephyr/ephyr.h
@@ -27,7 +27,6 @@
 #define _EPHYR_H_
 #include <stdio.h>
 #include <unistd.h>
-#include <signal.h>
 #include <libgen.h>
 #include <xcb/xcb_image.h>
 
diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
index a52bdef..76daaf2 100644
--- a/hw/kdrive/linux/linux.c
+++ b/hw/kdrive/linux/linux.c
@@ -25,7 +25,6 @@
 #endif
 #include "kdrive.h"
 #include <errno.h>
-#include <signal.h>
 #include <linux/vt.h>
 #include <linux/kd.h>
 #include <sys/stat.h>
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index 52bea5a..f02d826 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -43,8 +43,6 @@
 #include <execinfo.h>
 #endif
 
-#include <signal.h>
-
 #if defined(CONFIG_UDEV) || defined(CONFIG_HAL)
 #include <hotplug.h>
 #endif
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 4119b08..c2fc7bb 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -32,7 +32,6 @@
 #if HAVE_X11_XF86KEYSYM_H
 #include <X11/XF86keysym.h>
 #endif
-#include <signal.h>
 #include <stdio.h>
 #ifdef __sun
 #include <sys/file.h>           /* needed for FNONBLOCK & FASYNC */
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 323ac11..93c0d74 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -308,16 +308,16 @@ InstallSignalHandlers(void)
         OsRegisterSigWrapper(xf86SigWrapper);
     }
     else {
-        signal(SIGSEGV, SIG_DFL);
-        signal(SIGILL, SIG_DFL);
+        OsSignal(SIGSEGV, SIG_DFL);
+        OsSignal(SIGILL, SIG_DFL);
 #ifdef SIGEMT
-        signal(SIGEMT, SIG_DFL);
+        OsSignal(SIGEMT, SIG_DFL);
 #endif
-        signal(SIGFPE, SIG_DFL);
-        signal(SIGBUS, SIG_DFL);
-        signal(SIGSYS, SIG_DFL);
-        signal(SIGXCPU, SIG_DFL);
-        signal(SIGXFSZ, SIG_DFL);
+        OsSignal(SIGFPE, SIG_DFL);
+        OsSignal(SIGBUS, SIG_DFL);
+        OsSignal(SIGSYS, SIG_DFL);
+        OsSignal(SIGXCPU, SIG_DFL);
+        OsSignal(SIGXFSZ, SIG_DFL);
     }
 }
 
@@ -924,7 +924,7 @@ OsVendorInit(void)
 {
     static Bool beenHere = FALSE;
 
-    signal(SIGCHLD, SIG_DFL);   /* Need to wait for child processes */
+    OsSignal(SIGCHLD, SIG_DFL);   /* Need to wait for child processes */
 
     if (!beenHere) {
         umask(022);
diff --git a/hw/xfree86/os-support/bsd/bsd_init.c b/hw/xfree86/os-support/bsd/bsd_init.c
index 38dfde1..0d5d3c8 100644
--- a/hw/xfree86/os-support/bsd/bsd_init.c
+++ b/hw/xfree86/os-support/bsd/bsd_init.c
@@ -269,7 +269,7 @@ xf86OpenConsole()
                             "xf86OpenConsole: VT_WAITACTIVE failed\n");
                 }
 
-                signal(SIGUSR1, xf86VTRequest);
+                OsSignal(SIGUSR1, xf86VTRequest);
 
                 vtmode.mode = VT_PROCESS;
                 vtmode.relsig = SIGUSR1;
diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 1ed213c..d3a53ea 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -247,7 +247,7 @@ xf86OpenConsole(void)
                 FatalError("xf86OpenConsole: VT_GETMODE failed %s\n",
                            strerror(errno));
 
-            signal(SIGUSR1, xf86VTRequest);
+            OsSignal(SIGUSR1, xf86VTRequest);
 
             VT.mode = VT_PROCESS;
             VT.relsig = SIGUSR1;
diff --git a/hw/xfree86/os-support/shared/VTsw_usl.c b/hw/xfree86/os-support/shared/VTsw_usl.c
index f20106c..6440261 100644
--- a/hw/xfree86/os-support/shared/VTsw_usl.c
+++ b/hw/xfree86/os-support/shared/VTsw_usl.c
@@ -43,7 +43,7 @@
 void
 xf86VTRequest(int sig)
 {
-    signal(sig, (void (*)(int)) xf86VTRequest);
+    OsSignal(sig, (void (*)(int)) xf86VTRequest);
     xf86Info.vtRequestsPending = TRUE;
     return;
 }
diff --git a/hw/xfree86/parser/write.c b/hw/xfree86/parser/write.c
index 9a24dd6..122e967 100644
--- a/hw/xfree86/parser/write.c
+++ b/hw/xfree86/parser/write.c
@@ -63,7 +63,6 @@
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/wait.h>
-#include <signal.h>
 #include <errno.h>
 
 #if defined(HAVE_SETEUID) && defined(_POSIX_SAVED_IDS) && _POSIX_SAVED_IDS > 0
@@ -141,7 +140,7 @@ xf86writeConfigFile(const char *filename, XF86ConfigPtr cptr)
         void (*csig) (int);
 
         /* Need to fork to change ruid without loosing euid */
-        csig = signal(SIGCHLD, SIG_DFL);
+        csig = OsSignal(SIGCHLD, SIG_DFL);
         switch ((pid = fork())) {
         case -1:
             ErrorF("xf86writeConfigFile(): fork failed (%s)\n",
@@ -159,7 +158,7 @@ xf86writeConfigFile(const char *filename, XF86ConfigPtr cptr)
                 p = waitpid(pid, &status, 0);
             } while (p == -1 && errno == EINTR);
         }
-        signal(SIGCHLD, csig);
+        OsSignal(SIGCHLD, csig);
         if (p != -1 && WIFEXITED(status) && WEXITSTATUS(status) == 0)
             return 1;           /* success */
         else
diff --git a/include/globals.h b/include/globals.h
index 858c9a3..693bdf4 100644
--- a/include/globals.h
+++ b/include/globals.h
@@ -2,8 +2,6 @@
 #ifndef _XSERV_GLOBAL_H_
 #define _XSERV_GLOBAL_H_
 
-#include <signal.h>
-
 #include "window.h"             /* for WindowPtr */
 #include "extinit.h"
 
diff --git a/os/utils.c b/os/utils.c
index 086fe4f..5871ef8 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -1395,7 +1395,7 @@ System(const char *command)
     if (!command)
         return 1;
 
-    csig = signal(SIGCHLD, SIG_DFL);
+    csig = OsSignal(SIGCHLD, SIG_DFL);
     if (csig == SIG_ERR) {
         perror("signal");
         return -1;
@@ -1420,7 +1420,7 @@ System(const char *command)
 
     }
 
-    if (signal(SIGCHLD, csig) == SIG_ERR) {
+    if (OsSignal(SIGCHLD, csig) == SIG_ERR) {
         perror("signal");
         return -1;
     }
-- 
2.7.4



More information about the xorg-devel mailing list