v8-0007-Use-standard-die-handler-for-SIGTERM-in-bgworkers.patch

text/x-patch

Filename: v8-0007-Use-standard-die-handler-for-SIGTERM-in-bgworkers.patch
Type: text/x-patch
Part: 6
Message: Re: Interrupts vs signals

Patch

Format: format-patch
Series: patch v8-0007
Subject: Use standard die() handler for SIGTERM in bgworkers
File+
doc/src/sgml/bgworker.sgml 2 0
src/backend/postmaster/bgworker.c 1 15
From 1b0fa24f09d69e41881c33ed6bdec8f023f91f43 Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Tue, 20 Jan 2026 16:57:25 +0200
Subject: [PATCH v8 7/8] Use standard die() handler for SIGTERM in bgworkers

---
 doc/src/sgml/bgworker.sgml        |  2 ++
 src/backend/postmaster/bgworker.c | 16 +---------------
 2 files changed, 3 insertions(+), 15 deletions(-)

diff --git a/doc/src/sgml/bgworker.sgml b/doc/src/sgml/bgworker.sgml
index 4699ef6345f..b239e38aaae 100644
--- a/doc/src/sgml/bgworker.sgml
+++ b/doc/src/sgml/bgworker.sgml
@@ -254,6 +254,8 @@ typedef struct BackgroundWorker
    <literal>WL_POSTMASTER_DEATH</literal> flag is set when calling that function, and
    verify the return code for a prompt exit in the emergency case that
    <command>postgres</command> itself has terminated.
+
+   TODO document that: you should call CHECK_FOR_INTERRUPTS(), to react promptly to terminate request (SIGTERM)
   </para>
 
   <para>
diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c
index ed74d966026..06cfadaf88a 100644
--- a/src/backend/postmaster/bgworker.c
+++ b/src/backend/postmaster/bgworker.c
@@ -712,20 +712,6 @@ SanityCheckBackgroundWorker(BackgroundWorker *worker, int elevel)
 	return true;
 }
 
-/*
- * Standard SIGTERM handler for background workers
- */
-static void
-bgworker_die(SIGNAL_ARGS)
-{
-	sigprocmask(SIG_SETMASK, &BlockSig, NULL);
-
-	ereport(FATAL,
-			(errcode(ERRCODE_ADMIN_SHUTDOWN),
-			 errmsg("terminating background worker \"%s\" due to administrator command",
-					MyBgworkerEntry->bgw_type)));
-}
-
 /*
  * Main entry point for background worker processes.
  */
@@ -782,7 +768,7 @@ BackgroundWorkerMain(const void *startup_data, size_t startup_data_len)
 		pqsignal(SIGUSR1, SIG_IGN);
 		pqsignal(SIGFPE, SIG_IGN);
 	}
-	pqsignal(SIGTERM, bgworker_die);
+	pqsignal(SIGTERM, die);
 	/* SIGQUIT handler was already set up by InitPostmasterChild */
 	pqsignal(SIGHUP, SIG_IGN);
 
-- 
2.47.3