]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Ignore SIGINT in walwriter and walsummarizer
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 17 Feb 2026 15:18:31 +0000 (17:18 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 17 Feb 2026 15:18:31 +0000 (17:18 +0200)
Previously, SIGINT was treated the same as SIGTERM in walwriter and
walsummarizer. That decision goes back to when the walwriter process
was introduced (commit ad4295728e04), and was later copied to
walsummarizer. It was a pretty arbitrary decision back then, and we
haven't adopted that convention in all the other processes that have
been introduced later.

Summary of how other processes respond to SIGINT:
- Autovacuum launcher: Cancel the current iteration of launching
- bgworker: Ignore (unless connected to a database)
- checkpointer: Request shutdown checkpoint
- bgwriter: Ignore
- pgarch: Ignore
- startup process: Ignore
- walreceiver: Ignore
- IO worker: die()

IO workers are a notable exception in that they exit on SIGINT, and
there's a documented reason for that: IO workers ignore SIGTERM, so
SIGINT provides a way to manually kill them. (They do respond to
SIGUSR2, though, like all the other processes that we don't want to
exit immediately on SIGTERM on operating system shutdown.)

To make this a little more consistent, ignore SIGINT in walwriter and
walsummarizer. They have no "query" to cancel, and they react to
SIGTERM just fine.

Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://www.postgresql.org/message-id/818bafaf-1e77-4c78-8037-d7120878d87c@iki.fi

src/backend/postmaster/walsummarizer.c
src/backend/postmaster/walwriter.c

index 2d8f57099fd7ea39a8cd66b21e48e5e5255b8df6..742137edad69f717ce07859fdad3f7e860d992ee 100644 (file)
@@ -241,12 +241,9 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
 
        /*
         * Properly accept or ignore signals the postmaster might send us
-        *
-        * We have no particular use for SIGINT at the moment, but seems
-        * reasonable to treat like SIGTERM.
         */
        pqsignal(SIGHUP, SignalHandlerForConfigReload);
-       pqsignal(SIGINT, SignalHandlerForShutdownRequest);
+       pqsignal(SIGINT, SIG_IGN);      /* no query to cancel */
        pqsignal(SIGTERM, SignalHandlerForShutdownRequest);
        /* SIGQUIT handler was already set up by InitPostmasterChild */
        pqsignal(SIGALRM, SIG_IGN);
index 23e79a32345b0fe13e1f4a6e0f50abaea932e5c1..7c0e2809c1785b580c2cd7e8c59e9239c4fadd4d 100644 (file)
@@ -98,12 +98,9 @@ WalWriterMain(const void *startup_data, size_t startup_data_len)
 
        /*
         * Properly accept or ignore signals the postmaster might send us
-        *
-        * We have no particular use for SIGINT at the moment, but seems
-        * reasonable to treat like SIGTERM.
         */
        pqsignal(SIGHUP, SignalHandlerForConfigReload);
-       pqsignal(SIGINT, SignalHandlerForShutdownRequest);
+       pqsignal(SIGINT, SIG_IGN);      /* no query to cancel */
        pqsignal(SIGTERM, SignalHandlerForShutdownRequest);
        /* SIGQUIT handler was already set up by InitPostmasterChild */
        pqsignal(SIGALRM, SIG_IGN);