aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-02-01 16:21:00 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2014-02-01 16:21:30 -0500
commit6f1a4077310e97fe32379263918a31b95f85e2ed (patch)
treecce96a6bb9a0589c1258f78c4d39fc45a3025e94 /contrib
parent27942baf49eb3a939dde14cb81f254fbdf2b1816 (diff)
downloadpostgresql-6f1a4077310e97fe32379263918a31b95f85e2ed.tar.gz
postgresql-6f1a4077310e97fe32379263918a31b95f85e2ed.zip
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')
-rw-r--r--contrib/worker_spi/worker_spi.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/contrib/worker_spi/worker_spi.c b/contrib/worker_spi/worker_spi.c
index 99501fa5668..beffab1cad2 100644
--- a/contrib/worker_spi/worker_spi.c
+++ b/contrib/worker_spi/worker_spi.c
@@ -79,15 +79,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;
}
/*