From f333204bbcd32091311b070e8f8ab4717dd8cadf Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 31 Aug 2015 15:52:56 -0400 Subject: [PATCH] Actually, it's not that hard to merge the Windows pqsignal code ... ... just need to typedef sigset_t and provide sigemptyset/sigfillset, which are easy enough. --- src/backend/libpq/pqsignal.c | 24 +----------------------- src/include/libpq/pqsignal.h | 21 +++++++++------------ 2 files changed, 10 insertions(+), 35 deletions(-) diff --git a/src/backend/libpq/pqsignal.c b/src/backend/libpq/pqsignal.c index b19c4539f3f..064d35c91a0 100644 --- a/src/backend/libpq/pqsignal.c +++ b/src/backend/libpq/pqsignal.c @@ -18,15 +18,10 @@ #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 } diff --git a/src/include/libpq/pqsignal.h b/src/include/libpq/pqsignal.h index 33642475314..7ba7e781f7f 100644 --- a/src/include/libpq/pqsignal.h +++ b/src/include/libpq/pqsignal.h @@ -16,27 +16,24 @@ #include #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 */