Actually, it's not that hard to merge the Windows pqsignal code ...
authorTom Lane <[email protected]>
Mon, 31 Aug 2015 19:52:56 +0000 (15:52 -0400)
committerTom Lane <[email protected]>
Mon, 31 Aug 2015 19:52:56 +0000 (15:52 -0400)
... just need to typedef sigset_t and provide sigemptyset/sigfillset,
which are easy enough.

src/backend/libpq/pqsignal.c
src/include/libpq/pqsignal.h

index b19c4539f3f9ec28d5cba104695ae3397b9dee5f..064d35c91a01d27c1083f44be6de6fdc2708f830 100644 (file)
 #include "libpq/pqsignal.h"
 
 
-#ifndef WIN32
+/* Global variables */
 sigset_t       UnBlockSig,
                        BlockSig,
                        StartupBlockSig;
-#else
-int                    UnBlockSig,
-                       BlockSig,
-                       StartupBlockSig;
-#endif
 
 
 /*
@@ -45,8 +40,6 @@ int                   UnBlockSig,
 void
 pqinitmask(void)
 {
-#ifndef WIN32
-
        sigemptyset(&UnBlockSig);
 
        /* First set all signals, then clear some. */
@@ -101,19 +94,4 @@ pqinitmask(void)
 #ifdef SIGALRM
        sigdelset(&StartupBlockSig, SIGALRM);
 #endif
-#else                                                  /* WIN32 */
-       /* Set the signals we want. */
-       UnBlockSig = 0;
-       BlockSig = sigmask(SIGQUIT) |
-               sigmask(SIGTERM) | sigmask(SIGALRM) |
-       /* common signals between two */
-               sigmask(SIGHUP) |
-               sigmask(SIGINT) | sigmask(SIGUSR1) |
-               sigmask(SIGUSR2) | sigmask(SIGCHLD) |
-               sigmask(SIGWINCH) | sigmask(SIGFPE);
-       StartupBlockSig = sigmask(SIGHUP) |
-               sigmask(SIGINT) | sigmask(SIGUSR1) |
-               sigmask(SIGUSR2) | sigmask(SIGCHLD) |
-               sigmask(SIGWINCH) | sigmask(SIGFPE);
-#endif
 }
index 33642475314025451951b2b0dc488840c78b4577..7ba7e781f7f0ac69bad52dda74918e494b2f0da8 100644 (file)
 #include <signal.h>
 
 #ifndef WIN32
-extern sigset_t UnBlockSig,
-                       BlockSig,
-                       StartupBlockSig;
-
 #define PG_SETMASK(mask)       sigprocmask(SIG_SETMASK, mask, NULL)
-#else                                                  /* WIN32 */
-/*
- * Windows doesn't provide the POSIX signal API, so we use something
- * approximating the old BSD signal API.
- */
-extern int     UnBlockSig,
-                       BlockSig,
-                       StartupBlockSig;
+#else
+/* Emulate POSIX sigset_t APIs on Windows */
+typedef int sigset_t;
 
 extern int     pqsigsetmask(int mask);
 
 #define PG_SETMASK(mask)               pqsigsetmask(*(mask))
+#define sigemptyset(set)               (*(set) = 0)
+#define sigfillset(set)                        (*(set) = ~0)
 #define sigaddset(set, signum) (*(set) |= (sigmask(signum)))
 #define sigdelset(set, signum) (*(set) &= ~(sigmask(signum)))
 #endif   /* WIN32 */
 
+extern sigset_t UnBlockSig,
+                       BlockSig,
+                       StartupBlockSig;
+
 extern void pqinitmask(void);
 
 #endif   /* PQSIGNAL_H */