From: Fujii Masao Date: Tue, 12 Jul 2022 02:53:29 +0000 (+0900) Subject: Fix assertion failure and segmentation fault in backup code. X-Git-Tag: REL_10_22~23 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=2497d2b770916f802353f3bf5e03d42c4c98d3cf;p=postgresql.git 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 --- diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 414b7d2dcc0..ef5ce8c1caa 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -11484,6 +11484,8 @@ do_pg_abort_backup(void) { XLogCtl->Insert.forcePageWrites = false; } + + sessionBackupState = SESSION_BACKUP_NONE; WALInsertLockRelease(); }