Skip to content

Commit 4392db8

Browse files
committed
Ignore interrupts during quickdie().
Once the administrator has called for an immediate shutdown or a backend crash has triggered a reinitialization, no mere SIGINT or SIGTERM should change that course. Such derailment remains possible when the signal arrives before quickdie() blocks signals. That being a narrow race affecting most PostgreSQL signal handlers in some way, leave it for another patch. Back-patch this to all supported versions.
1 parent e819308 commit 4392db8

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/backend/tcop/postgres.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2522,6 +2522,13 @@ quickdie(SIGNAL_ARGS)
25222522
sigaddset(&BlockSig, SIGQUIT); /* prevent nested calls */
25232523
PG_SETMASK(&BlockSig);
25242524

2525+
/*
2526+
* Prevent interrupts while exiting; though we just blocked signals that
2527+
* would queue new interrupts, one may have been pending. We don't want a
2528+
* quickdie() downgraded to a mere query cancel.
2529+
*/
2530+
HOLD_INTERRUPTS();
2531+
25252532
/*
25262533
* If we're aborting out of client auth, don't risk trying to send
25272534
* anything to the client; we will likely violate the protocol, not to

0 commit comments

Comments
 (0)