postgres.git / summary / log / commit / refs

commit    5ccceb2946d4104804f8dca67515b602f5e78cdd
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Fri Oct 29 18:40:15 2021 +0000
First released in: 15.0

    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


src/backend/postmaster/startup.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/postmaster/startup.c b/src/backend/postmaster/startup.c index 28e68dd8715..47ec7378880 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); [parent: 2f5c4397c39d]