mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
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.
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user