From 7659d36c227fb8193bc76c03f8f215f0a3ac3bb5 Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy Date: Sat, 3 Oct 2020 09:40:05 +0530 Subject: [PATCH v1] Use Standard SIGTERM,SIGHUP Handlers In AutoPrewarm Replace apw_sigterm_handler and apw_sighup_handler with standard signal handlers SignalHandlerForShutdownRequest and SignalHandlerForConfigReload. --- contrib/pg_prewarm/autoprewarm.c | 49 ++++---------------------------- 1 file changed, 6 insertions(+), 43 deletions(-) diff --git a/contrib/pg_prewarm/autoprewarm.c b/contrib/pg_prewarm/autoprewarm.c index c32ddc56fd..93e526ef62 100644 --- a/contrib/pg_prewarm/autoprewarm.c +++ b/contrib/pg_prewarm/autoprewarm.c @@ -35,6 +35,7 @@ #include "miscadmin.h" #include "pgstat.h" #include "postmaster/bgworker.h" +#include "postmaster/interrupt.h" #include "storage/buf_internals.h" #include "storage/dsm.h" #include "storage/ipc.h" @@ -94,12 +95,6 @@ static void apw_start_database_worker(void); static bool apw_init_shmem(void); static void apw_detach_shmem(int code, Datum arg); static int apw_compare_blockinfo(const void *p, const void *q); -static void apw_sigterm_handler(SIGNAL_ARGS); -static void apw_sighup_handler(SIGNAL_ARGS); - -/* Flags set by signal handlers */ -static volatile sig_atomic_t got_sigterm = false; -static volatile sig_atomic_t got_sighup = false; /* Pointer to shared-memory state. */ static AutoPrewarmSharedState *apw_state = NULL; @@ -161,8 +156,8 @@ autoprewarm_main(Datum main_arg) TimestampTz last_dump_time = 0; /* Establish signal handlers; once that's done, unblock signals. */ - pqsignal(SIGTERM, apw_sigterm_handler); - pqsignal(SIGHUP, apw_sighup_handler); + pqsignal(SIGTERM, SignalHandlerForShutdownRequest); + pqsignal(SIGHUP, SignalHandlerForConfigReload); pqsignal(SIGUSR1, procsignal_sigusr1_handler); BackgroundWorkerUnblockSignals(); @@ -206,12 +201,12 @@ autoprewarm_main(Datum main_arg) } /* Periodically dump buffers until terminated. */ - while (!got_sigterm) + while (!ShutdownRequestPending) { /* In case of a SIGHUP, just reload the configuration. */ - if (got_sighup) + if (ConfigReloadPending) { - got_sighup = false; + ConfigReloadPending = false; ProcessConfigFile(PGC_SIGHUP); } @@ -895,35 +890,3 @@ apw_compare_blockinfo(const void *p, const void *q) return 0; } - -/* - * Signal handler for SIGTERM - */ -static void -apw_sigterm_handler(SIGNAL_ARGS) -{ - int save_errno = errno; - - got_sigterm = true; - - if (MyProc) - SetLatch(&MyProc->procLatch); - - errno = save_errno; -} - -/* - * Signal handler for SIGHUP - */ -static void -apw_sighup_handler(SIGNAL_ARGS) -{ - int save_errno = errno; - - got_sighup = true; - - if (MyProc) - SetLatch(&MyProc->procLatch); - - errno = save_errno; -} -- 2.25.1