summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas2021-10-29 18:40:15 +0000
committerRobert Haas2021-10-29 18:40:15 +0000
commit5ccceb2946d4104804f8dca67515b602f5e78cdd (patch)
tree41a77009aac45625f6ca7b226e4dcd948b21167a
parent2f5c4397c39dea49c5608ba583868e26d767fc32 (diff)
Fix race condition in startup progress reporting.
Commit 9ce346eabf350a130bba46be3f8c50ba28506969 added startup progress reporting, but begin_startup_progress_phase has a race condition: the timeout for the previous phase might fire just before we reschedule the interrupt for the next phase. To avoid the race, disable the timeout, clear the flag, and then re-enable the timeout. Patch by me, reviewed by Nitin Jadhav. Discussion: https://postgr.es/m/CA+TgmoYq38i6iAzfRLVxA6Cm+wMCf4WM8wC3o_a+X_JvWC8bJg@mail.gmail.com
-rw-r--r--src/backend/postmaster/startup.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/backend/postmaster/startup.c b/src/backend/postmaster/startup.c
index 28e68dd871..47ec737888 100644
--- a/src/backend/postmaster/startup.c
+++ b/src/backend/postmaster/startup.c
@@ -320,6 +320,8 @@ begin_startup_progress_phase(void)
if (log_startup_progress_interval == 0)
return;
+ disable_timeout(STARTUP_PROGRESS_TIMEOUT, false);
+ startup_progress_timer_expired = false;
startup_progress_phase_start_time = GetCurrentTimestamp();
fin_time = TimestampTzPlusMilliseconds(startup_progress_phase_start_time,
log_startup_progress_interval);