0003-Use-standard-die-handler-for-SIGTERM-in-bgworkers.patch
text/x-patch
Filename: 0003-Use-standard-die-handler-for-SIGTERM-in-bgworkers.patch
Type: text/x-patch
Part: 2
Message:
Re: Interrupts vs signals
Patch
Format: format-patch
Series: patch 0003
Subject: Use standard die() handler for SIGTERM in bgworkers
| File | + | − |
|---|---|---|
| doc/src/sgml/bgworker.sgml | 2 | 0 |
| src/backend/access/transam/parallel.c | 0 | 1 |
| src/backend/postmaster/bgworker.c | 1 | 15 |
| src/backend/replication/logical/applyparallelworker.c | 0 | 1 |
| src/backend/replication/logical/launcher.c | 0 | 1 |
| src/backend/replication/logical/worker.c | 0 | 1 |
From 63d1a57f4906a924c426def4e1a7f27a71611b28 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 3/5] Use standard die() handler for SIGTERM in bgworkers
---
doc/src/sgml/bgworker.sgml | 2 ++
src/backend/access/transam/parallel.c | 1 -
src/backend/postmaster/bgworker.c | 16 +---------------
.../replication/logical/applyparallelworker.c | 1 -
src/backend/replication/logical/launcher.c | 1 -
src/backend/replication/logical/worker.c | 1 -
6 files changed, 3 insertions(+), 19 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/access/transam/parallel.c b/src/backend/access/transam/parallel.c
index fe00488487d..44786dc131f 100644
--- a/src/backend/access/transam/parallel.c
+++ b/src/backend/access/transam/parallel.c
@@ -1327,7 +1327,6 @@ ParallelWorkerMain(Datum main_arg)
InitializingParallelWorker = true;
/* Establish signal handlers. */
- pqsignal(SIGTERM, die);
BackgroundWorkerUnblockSignals();
/* Determine and set our parallel worker number. */
diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c
index d4031ac3787..133af5aee97 100644
--- a/src/backend/postmaster/bgworker.c
+++ b/src/backend/postmaster/bgworker.c
@@ -718,20 +718,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.
*/
@@ -787,7 +773,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);
diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c
index 8a01f16a2ca..1730ace5490 100644
--- a/src/backend/replication/logical/applyparallelworker.c
+++ b/src/backend/replication/logical/applyparallelworker.c
@@ -879,7 +879,6 @@ ParallelApplyWorkerMain(Datum main_arg)
* receiving SIGTERM.
*/
pqsignal(SIGHUP, SignalHandlerForConfigReload);
- pqsignal(SIGTERM, die);
pqsignal(SIGUSR2, SignalHandlerForShutdownRequest);
BackgroundWorkerUnblockSignals();
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c
index 3ed86480be2..e6112e11ec2 100644
--- a/src/backend/replication/logical/launcher.c
+++ b/src/backend/replication/logical/launcher.c
@@ -1213,7 +1213,6 @@ ApplyLauncherMain(Datum main_arg)
/* Establish signal handlers. */
pqsignal(SIGHUP, SignalHandlerForConfigReload);
- pqsignal(SIGTERM, die);
BackgroundWorkerUnblockSignals();
/*
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index 32725c48623..75af3a71ca8 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -5890,7 +5890,6 @@ SetupApplyOrSyncWorker(int worker_slot)
/* Setup signal handling */
pqsignal(SIGHUP, SignalHandlerForConfigReload);
- pqsignal(SIGTERM, die);
BackgroundWorkerUnblockSignals();
/*
--
2.47.3