Actually, it's not that hard to merge the Windows pqsignal code ...
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 31 Aug 2015 19:52:56 +0000 (15:52 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
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 */