summaryrefslogtreecommitdiff
path: root/contrib/worker_spi/worker_spi.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-02-01 16:20:56 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2014-02-01 16:21:23 -0500
commit214c7a4f0b1784ce855512c2961b09c9f51dafd8 (patch)
tree4eb56ad918fddf0a219e620156916875044a5c00 /contrib/worker_spi/worker_spi.c
parent7e1531a4504248d9df5deae8c4aa9340adaa7ef5 (diff)
Fix some more bugs in signal handlers and process shutdown logic.
WalSndKill was doing things exactly backwards: it should first clear MyWalSnd (to stop signal handlers from touching MyWalSnd->latch), then disown the latch, and only then mark the WalSnd struct unused by clearing its pid field. Also, WalRcvSigUsr1Handler and worker_spi_sighup failed to preserve errno, which is surely a requirement for any signal handler. Per discussion of recent buildfarm failures. Back-patch as far as the relevant code exists.
Diffstat (limited to 'contrib/worker_spi/worker_spi.c')
-rw-r--r--contrib/worker_spi/worker_spi.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/contrib/worker_spi/worker_spi.c b/contrib/worker_spi/worker_spi.c
index 23ace7a8afe..560be21814e 100644
--- a/contrib/worker_spi/worker_spi.c
+++ b/contrib/worker_spi/worker_spi.c
@@ -42,6 +42,7 @@
#include "tcop/utility.h"
PG_MODULE_MAGIC;
+
PG_FUNCTION_INFO_V1(worker_spi_launch);
void _PG_init(void);
@@ -82,15 +83,19 @@ worker_spi_sigterm(SIGNAL_ARGS)
/*
* Signal handler for SIGHUP
- * Set a flag to let the main loop to reread the config file, and set
+ * Set a flag to tell the main loop to reread the config file, and set
* our latch to wake it up.
*/
static void
worker_spi_sighup(SIGNAL_ARGS)
{
+ int save_errno = errno;
+
got_sighup = true;
if (MyProc)
SetLatch(&MyProc->procLatch);
+
+ errno = save_errno;
}
/*