diff options
Diffstat (limited to 'src/interfaces/libpq/pqsignal.c')
-rw-r--r-- | src/interfaces/libpq/pqsignal.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/interfaces/libpq/pqsignal.c b/src/interfaces/libpq/pqsignal.c index 179a3a99aa1..5f41d228103 100644 --- a/src/interfaces/libpq/pqsignal.c +++ b/src/interfaces/libpq/pqsignal.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/pqsignal.c,v 1.18 2003/11/29 19:52:12 pgsql Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/pqsignal.c,v 1.19 2004/01/09 02:02:43 momjian Exp $ * * NOTES * This shouldn't be in libpq, but the monitor and some other @@ -40,3 +40,25 @@ pqsignal(int signo, pqsigfunc func) return oact.sa_handler; #endif /* !HAVE_POSIX_SIGNALS */ } + +pqsigfunc +pqsignalinquire(int signo) +{ +#if !defined(HAVE_POSIX_SIGNALS) + pqsigfunc old_sigfunc; + int old_sigmask; + + /* Prevent signal handler calls during test */ + old_sigmask = sigblock(sigmask(signo)); + old_sigfunc = signal(signo, SIG_DFL); + signal(signo, old_sigfunc); + sigblock(old_sigmask); + return old_sigfunc; +#else + struct sigaction oact; + + if (sigaction(signo, NULL, &oact) < 0) + return SIG_ERR; + return oact.sa_handler; +#endif /* !HAVE_POSIX_SIGNALS */ +} |