Merge pull request #3601 from citusdata/maintenanced-dont-proc-exit-from-term-handler

maintenanced: Don't call proc_exit in SIGTERM handler
pull/3584/head
Philip Dubé 2020-03-10 13:50:48 +00:00 committed by GitHub
commit d0d51bb8c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 5 deletions

View File

@ -102,6 +102,7 @@ static MaintenanceDaemonControlData *MaintenanceDaemonControl = NULL;
static HTAB *MaintenanceDaemonDBHash; static HTAB *MaintenanceDaemonDBHash;
static volatile sig_atomic_t got_SIGHUP = false; static volatile sig_atomic_t got_SIGHUP = false;
static volatile sig_atomic_t got_SIGTERM = false;
static void MaintenanceDaemonSigTermHandler(SIGNAL_ARGS); static void MaintenanceDaemonSigTermHandler(SIGNAL_ARGS);
static void MaintenanceDaemonSigHupHandler(SIGNAL_ARGS); static void MaintenanceDaemonSigHupHandler(SIGNAL_ARGS);
@ -145,8 +146,7 @@ InitializeMaintenanceDaemonBackend(void)
MaintenanceDaemonDBData *dbData = (MaintenanceDaemonDBData *) hash_search( MaintenanceDaemonDBData *dbData = (MaintenanceDaemonDBData *) hash_search(
MaintenanceDaemonDBHash, MaintenanceDaemonDBHash,
& &MyDatabaseId,
MyDatabaseId,
HASH_ENTER_NULL, HASH_ENTER_NULL,
&found); &found);
@ -253,7 +253,7 @@ CitusMaintenanceDaemonMain(Datum main_arg)
/* /*
* Look up this worker's configuration. * Look up this worker's configuration.
*/ */
LWLockAcquire(&MaintenanceDaemonControl->lock, LW_SHARED); LWLockAcquire(&MaintenanceDaemonControl->lock, LW_EXCLUSIVE);
MaintenanceDaemonDBData *myDbData = (MaintenanceDaemonDBData *) MaintenanceDaemonDBData *myDbData = (MaintenanceDaemonDBData *)
hash_search(MaintenanceDaemonDBHash, &databaseOid, hash_search(MaintenanceDaemonDBHash, &databaseOid,
@ -305,7 +305,7 @@ CitusMaintenanceDaemonMain(Datum main_arg)
pgstat_report_appname("Citus Maintenance Daemon"); pgstat_report_appname("Citus Maintenance Daemon");
/* enter main loop */ /* enter main loop */
for (;;) while (!got_SIGTERM)
{ {
int rc; int rc;
int latchFlags = WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH; int latchFlags = WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH;
@ -651,7 +651,15 @@ MaintenanceDaemonShmemInit(void)
static void static void
MaintenanceDaemonSigTermHandler(SIGNAL_ARGS) MaintenanceDaemonSigTermHandler(SIGNAL_ARGS)
{ {
proc_exit(0); int save_errno = errno;
got_SIGTERM = true;
if (MyProc != NULL)
{
SetLatch(&MyProc->procLatch);
}
errno = save_errno;
} }