pg_prewarm: make autoprewarm leader use standard SIGHUP and SIGTERM handlers.
authorFujii Masao <fujii@postgresql.org>
Fri, 6 Nov 2020 17:08:06 +0000 (02:08 +0900)
committerFujii Masao <fujii@postgresql.org>
Fri, 6 Nov 2020 17:08:06 +0000 (02:08 +0900)
Commit 1e53fe0e70 changed background processes so that they use
standard SIGHUP handler. Like that, this commit makes autoprewarm leader
process also use standard SIGHUP and SIGTERM handlers, to simplify the code.

Author: Bharath Rupireddy
Reviewed-by: Kyotaro Horiguchi, Fujii Masao
Discussion: https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com

contrib/pg_prewarm/autoprewarm.c

index c32ddc56fdbc403c74e7feb9ee2e43621aca002b..d3dec6e3ec6db469383cb2f88c36b55edb6dd44d 100644 (file)
@@ -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,19 +201,19 @@ 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);
        }
 
        if (autoprewarm_interval <= 0)
        {
            /* We're only dumping at shutdown, so just wait forever. */
-           (void) WaitLatch(&MyProc->procLatch,
+           (void) WaitLatch(MyLatch,
                             WL_LATCH_SET | WL_EXIT_ON_PM_DEATH,
                             -1L,
                             PG_WAIT_EXTENSION);
@@ -247,14 +242,14 @@ autoprewarm_main(Datum main_arg)
            }
 
            /* Sleep until the next dump time. */
-           (void) WaitLatch(&MyProc->procLatch,
+           (void) WaitLatch(MyLatch,
                             WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
                             delay_in_ms,
                             PG_WAIT_EXTENSION);
        }
 
        /* Reset the latch, loop. */
-       ResetLatch(&MyProc->procLatch);
+       ResetLatch(MyLatch);
    }
 
    /*
@@ -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;
-}