• Fujii Masao's avatar
    Fix an assertion failure related to an exclusive backup. · 974ece58
    Fujii Masao authored
    Previously multiple sessions could execute pg_start_backup() and
    pg_stop_backup() to start and stop an exclusive backup at the same time.
    This could trigger the assertion failure of
    "FailedAssertion("!(XLogCtl->Insert.exclusiveBackup)".
    This happend because, even while pg_start_backup() was starting
    an exclusive backup, other session could run pg_stop_backup()
    concurrently and mark the backup as not-in-progress unconditionally.
    
    This patch introduces ExclusiveBackupState indicating the state of
    an exclusive backup. This state is used to ensure that there is only
    one session running pg_start_backup() or pg_stop_backup() at
    the same time, to avoid the assertion failure.
    
    Back-patch to all supported versions.
    
    Author: Michael Paquier
    Reviewed-By: Kyotaro Horiguchi and me
    Reported-By: Andreas Seltenreich
    Discussion: <87mvktojme.fsf@credativ.de>
    974ece58
xlog.c 368 KB