From c7eadbc5871630ddad399f0eb3d2292d4b3f31ef Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Sun, 29 Sep 2024 12:29:31 +0300 Subject: [PATCH v4 1/3] Make WaitForLSNReplay() issue FATAL on postmaster death Reported-by: Michael Paquier Discussion: https://postgr.es/m/ZvY2C8N4ZqgCFaLu%40paquier.xyz --- src/backend/commands/waitlsn.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/waitlsn.c b/src/backend/commands/waitlsn.c index 501938f4330..7f3cd62e2a2 100644 --- a/src/backend/commands/waitlsn.c +++ b/src/backend/commands/waitlsn.c @@ -222,7 +222,7 @@ WaitForLSNReplay(XLogRecPtr targetLSN, int64 timeout) { XLogRecPtr currentLSN; TimestampTz endtime = 0; - int wake_events = WL_LATCH_SET | WL_EXIT_ON_PM_DEATH; + int wake_events = WL_LATCH_SET | WL_POSTMASTER_DEATH; /* Shouldn't be called when shmem isn't initialized */ Assert(waitLSNState); @@ -313,6 +313,16 @@ WaitForLSNReplay(XLogRecPtr targetLSN, int64 timeout) rc = WaitLatch(MyLatch, wake_events, delay_ms, WAIT_EVENT_WAIT_FOR_WAL_REPLAY); + /* + * Emergency bailout if postmaster has died. This is to avoid the + * necessity for manual cleanup of all postmaster children. + */ + if (rc & WL_POSTMASTER_DEATH) + ereport(FATAL, + (errcode(ERRCODE_ADMIN_SHUTDOWN), + errmsg("terminating connection due to unexpected postmaster exit"), + errcontext("while waiting for LSN replay"))); + if (rc & WL_LATCH_SET) ResetLatch(MyLatch); } -- 2.39.5 (Apple Git-154)