aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/libpq/pqsignal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/libpq/pqsignal.c')
-rw-r--r--src/interfaces/libpq/pqsignal.c24
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 */
+}