From eebbba4924a498a8887259ce1565059f8661e117 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Wed, 10 Oct 2018 14:50:53 +1300 Subject: [PATCH 2/2] Remove async-signal-unsafe bgworker_die() function. The default SIGTERM handler for background workers called ereport() directly. Hopefully background workers typically install their own handler, but for the benefit of those that don't, let's install the standard die() handler instead. That defers handling until the next CHECK_FOR_INTERRUPTS(). Author: Thomas Munro Discussion: https://postgr.es/m/CA%2BTgmobwExL4kNj_eXJxPah_tVQ31N0cYDbUN0FFm6uaY_%2BX%3Dw%40mail.gmail.com --- src/backend/postmaster/bgworker.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index d2b695e1462..13f48244e79 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -661,20 +661,6 @@ bgworker_quickdie(SIGNAL_ARGS) _exit(2); } -/* - * Standard SIGTERM handler for background workers - */ -static void -bgworker_die(SIGNAL_ARGS) -{ - PG_SETMASK(&BlockSig); - - ereport(FATAL, - (errcode(ERRCODE_ADMIN_SHUTDOWN), - errmsg("terminating background worker \"%s\" due to administrator command", - MyBgworkerEntry->bgw_type))); -} - /* * Standard SIGUSR1 handler for unconnected workers * @@ -751,7 +737,7 @@ StartBackgroundWorker(void) pqsignal(SIGUSR1, bgworker_sigusr1_handler); pqsignal(SIGFPE, SIG_IGN); } - pqsignal(SIGTERM, bgworker_die); + pqsignal(SIGTERM, die); /* die at next CFI */ pqsignal(SIGHUP, SIG_IGN); pqsignal(SIGQUIT, bgworker_quickdie); -- 2.17.1 (Apple Git-112)