diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index c1dd8168ca..d6b8738d28 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -140,7 +140,6 @@ static bool am_autovacuum_worker = false; /* Flags set by signal handlers */ static volatile sig_atomic_t got_SIGHUP = false; static volatile sig_atomic_t got_SIGUSR2 = false; -static volatile sig_atomic_t got_SIGTERM = false; /* Comparison points for determining whether freeze_max_age is exceeded */ static TransactionId recentXid; @@ -344,7 +343,6 @@ static void autovac_report_workitem(AutoVacuumWorkItem *workitem, const char *nspname, const char *relname); static void av_sighup_handler(SIGNAL_ARGS); static void avl_sigusr2_handler(SIGNAL_ARGS); -static void avl_sigterm_handler(SIGNAL_ARGS); static void autovac_refresh_stats(void); @@ -452,7 +450,7 @@ AutoVacLauncherMain(int argc, char *argv[]) */ pqsignal(SIGHUP, av_sighup_handler); pqsignal(SIGINT, StatementCancelHandler); - pqsignal(SIGTERM, avl_sigterm_handler); + pqsignal(SIGTERM, die); pqsignal(SIGQUIT, quickdie); InitializeTimeouts(); /* establishes SIGALRM handler */ @@ -552,9 +550,8 @@ AutoVacLauncherMain(int argc, char *argv[]) /* Now we can allow interrupts again */ RESUME_INTERRUPTS(); - /* if in shutdown mode, no need for anything further; just go away */ - if (got_SIGTERM) - goto shutdown; + /* And check for them, too */ + CHECK_FOR_INTERRUPTS(); /* * Sleep at least 1 second after any error. We don't want to be @@ -605,8 +602,8 @@ AutoVacLauncherMain(int argc, char *argv[]) */ if (!AutoVacuumingActive()) { - if (!got_SIGTERM) - do_start_worker(); + CHECK_FOR_INTERRUPTS(); + do_start_worker(); proc_exit(0); /* done */ } @@ -622,12 +619,14 @@ AutoVacLauncherMain(int argc, char *argv[]) rebuild_database_list(InvalidOid); /* loop until shutdown request */ - while (!got_SIGTERM) + while (1) { struct timeval nap; TimestampTz current_time = 0; bool can_launch; + CHECK_FOR_INTERRUPTS(); + /* * This loop is a bit different from the normal use of WaitLatch, * because we'd like to sleep before the first launch of a child @@ -652,10 +651,6 @@ AutoVacLauncherMain(int argc, char *argv[]) /* Process sinval catchup interrupts that happened while sleeping */ ProcessCatchupInterrupt(); - /* the normal shutdown case */ - if (got_SIGTERM) - break; - if (got_SIGHUP) { got_SIGHUP = false; @@ -814,7 +809,6 @@ AutoVacLauncherMain(int argc, char *argv[]) } /* Normal exit from the autovac launcher is here */ -shutdown: ereport(DEBUG1, (errmsg("autovacuum launcher shutting down"))); AutoVacuumShmem->av_launcherpid = 0; @@ -1411,18 +1405,6 @@ avl_sigusr2_handler(SIGNAL_ARGS) errno = save_errno; } -/* SIGTERM: time to die */ -static void -avl_sigterm_handler(SIGNAL_ARGS) -{ - int save_errno = errno; - - got_SIGTERM = true; - SetLatch(MyLatch); - - errno = save_errno; -} - /******************************************************************** * AUTOVACUUM WORKER CODE