aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2013-04-10 16:01:16 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2013-04-10 16:01:16 -0300
commitf62ab623adc63023c6aee22e2a6fe190439ca0c3 (patch)
tree3ce329709f455641b86b95a8ce03e2f24cf83962 /src/backend
parent61a7d576f2a287ef59071da9d9d7a0cd473ed98b (diff)
downloadpostgresql-f62ab623adc63023c6aee22e2a6fe190439ca0c3.tar.gz
postgresql-f62ab623adc63023c6aee22e2a6fe190439ca0c3.zip
Fix SIGUSR1 handling by unconnected bgworkers
Latch activity was not being detected by non-database-connected workers; the SIGUSR1 signal handler which is normally in charge of that was set to SIG_IGN. Create a simple handler to call latch_sigusr1_handler instead. Robert Haas (bug report and suggested fix)
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/postmaster/postmaster.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 5ff35774787..474e17e9218 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -5354,6 +5354,22 @@ bgworker_die(SIGNAL_ARGS)
MyBgworkerEntry->bgw_name)));
}
+/*
+ * Standard SIGUSR1 handler for unconnected workers
+ *
+ * Here, we want to make sure an unconnected worker will at least heed
+ * latch activity.
+ */
+static void
+bgworker_sigusr1_handler(SIGNAL_ARGS)
+{
+ int save_errno = errno;
+
+ latch_sigusr1_handler();
+
+ errno = save_errno;
+}
+
static void
do_start_bgworker(void)
{
@@ -5410,7 +5426,7 @@ do_start_bgworker(void)
else
{
pqsignal(SIGINT, SIG_IGN);
- pqsignal(SIGUSR1, SIG_IGN);
+ pqsignal(SIGUSR1, bgworker_sigusr1_handler);
pqsignal(SIGFPE, SIG_IGN);
}