diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-02-01 16:21:00 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-02-01 16:21:30 -0500 |
commit | 6f1a4077310e97fe32379263918a31b95f85e2ed (patch) | |
tree | cce96a6bb9a0589c1258f78c4d39fc45a3025e94 /contrib | |
parent | 27942baf49eb3a939dde14cb81f254fbdf2b1816 (diff) | |
download | postgresql-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.c | 6 |
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; } /* |