summaryrefslogtreecommitdiff
path: root/src/backend/libpq/pqsignal.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-06-28 03:33:33 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-06-28 03:33:33 +0000
commit1aebc3618a0be13451918581ad390ad9a3518702 (patch)
treee8ab228245c43ff086bd8e9d65baf3d1d9a5f96a /src/backend/libpq/pqsignal.c
parentb601c8d8828ee02ffb195dead82b233b9572fe32 (diff)
downloadpostgresql-1aebc3618a0be13451918581ad390ad9a3518702.tar.gz
First phase of memory management rewrite (see backend/utils/mmgr/README
for details). It doesn't really do that much yet, since there are no short-term memory contexts in the executor, but the infrastructure is in place and long-term contexts are handled reasonably. A few long- standing bugs have been fixed, such as 'VACUUM; anything' in a single query string crashing. Also, out-of-memory is now considered a recoverable ERROR, not FATAL. Eliminate a large amount of crufty, now-dead code in and around memory management. Fix problem with holding off SIGTRAP, SIGSEGV, etc in postmaster and backend startup.
Diffstat (limited to 'src/backend/libpq/pqsignal.c')
-rw-r--r--src/backend/libpq/pqsignal.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/backend/libpq/pqsignal.c b/src/backend/libpq/pqsignal.c
index 04ebd7dd57..4648fe455f 100644
--- a/src/backend/libpq/pqsignal.c
+++ b/src/backend/libpq/pqsignal.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/pqsignal.c,v 1.15 2000/06/11 11:39:50 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/pqsignal.c,v 1.16 2000/06/28 03:31:41 tgl Exp $
*
* NOTES
* This shouldn't be in libpq, but the monitor and some other
@@ -44,6 +44,44 @@
#include "libpq/pqsignal.h"
+
+/*
+ * Initialize BlockSig and UnBlockSig.
+ *
+ * BlockSig is the set of signals to block when we are trying to block
+ * signals. This includes all signals we normally expect to get, but NOT
+ * signals that should never be turned off.
+ *
+ * UnBlockSig is the set of signals to block when we don't want to block
+ * signals (is this ever nonzero??)
+ */
+void
+pqinitmask(void)
+{
+#ifdef HAVE_SIGPROCMASK
+ sigemptyset(&UnBlockSig);
+ sigfillset(&BlockSig);
+ sigdelset(&BlockSig, SIGABRT);
+ sigdelset(&BlockSig, SIGILL);
+ sigdelset(&BlockSig, SIGSEGV);
+ sigdelset(&BlockSig, SIGBUS);
+ sigdelset(&BlockSig, SIGTRAP);
+ sigdelset(&BlockSig, SIGCONT);
+ sigdelset(&BlockSig, SIGSYS);
+#else
+ UnBlockSig = 0;
+ BlockSig = sigmask(SIGHUP) | sigmask(SIGQUIT) |
+ sigmask(SIGTERM) | sigmask(SIGALRM) |
+ sigmask(SIGINT) | sigmask(SIGUSR1) |
+ sigmask(SIGUSR2) | sigmask(SIGCHLD) |
+ sigmask(SIGWINCH) | sigmask(SIGFPE);
+#endif
+}
+
+
+/*
+ * Set up a signal handler
+ */
pqsigfunc
pqsignal(int signo, pqsigfunc func)
{