diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-02-01 16:20:56 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-02-01 16:21:23 -0500 |
commit | 214c7a4f0b1784ce855512c2961b09c9f51dafd8 (patch) | |
tree | 4eb56ad918fddf0a219e620156916875044a5c00 /contrib/worker_spi/worker_spi.c | |
parent | 7e1531a4504248d9df5deae8c4aa9340adaa7ef5 (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.c | 7 |
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; } /* |