postgres.git / summary / log / commit / refs

commit    be2e842c8a79d98a3fa03eeaf9329bf1f51a9704
Author:   Fujii Masao <fujii@postgresql.org>
Date:     Tue Jul 12 02:53:29 2022 +0000

    Fix assertion failure and segmentation fault in backup code.
    
    When a non-exclusive backup is canceled, do_pg_abort_backup() is called
    and resets some variables set by pg_backup_start (pg_start_backup in v14
    or before). But previously it forgot to reset the session state indicating
    whether a non-exclusive backup is in progress or not in this session.
    
    This issue could cause an assertion failure when the session running
    BASE_BACKUP is terminated after it executed pg_backup_start and
    pg_backup_stop (pg_stop_backup in v14 or before). Also it could cause
    a segmentation fault when pg_backup_stop is called after BASE_BACKUP
    in the same session is canceled.
    
    This commit fixes the issue by making do_pg_abort_backup reset
    that session state.
    
    Back-patch to all supported branches.
    
    Author: Fujii Masao
    Reviewed-by: Kyotaro Horiguchi, Masahiko Sawada, Michael Paquier, Robert Haas
    Discussion: https://postgr.es/m/3374718f-9fbf-a950-6d66-d973e027f44c@oss.nttdata.com


src/backend/access/transam/xlog.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 5cdd01f1b39..e1e5cc22c56 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -11879,6 +11879,8 @@ do_pg_abort_backup(int code, Datum arg) { XLogCtl->Insert.forcePageWrites = false; } + + sessionBackupState = SESSION_BACKUP_NONE; WALInsertLockRelease(); if (emit_warning) [parent: 2aedf25eb4d0]