@@ -103,6 +103,7 @@ int wal_level = WAL_LEVEL_MINIMAL;
103
103
int CommitDelay = 0 ; /* precommit delay in microseconds */
104
104
int CommitSiblings = 5 ; /* # concurrent xacts needed to sleep */
105
105
int wal_retrieve_retry_interval = 5000 ;
106
+ bool cfs_lock_taken = false;
106
107
107
108
TransactionId start_xid = 0 ;
108
109
MultiXactId start_mx_id = 0 ;
@@ -9894,6 +9895,7 @@ do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p,
9894
9895
WALInsertLockRelease ();
9895
9896
9896
9897
cfs_control_gc_lock (); /* disable GC during backup */
9898
+ cfs_lock_taken = true;
9897
9899
9898
9900
/* Ensure we release forcePageWrites if fail below */
9899
9901
PG_ENSURE_ERROR_CLEANUP (pg_start_backup_callback , (Datum ) BoolGetDatum (exclusive ));
@@ -10272,7 +10274,11 @@ pg_start_backup_callback(int code, Datum arg)
10272
10274
}
10273
10275
WALInsertLockRelease ();
10274
10276
10275
- cfs_control_gc_unlock (); /* Restore CFS GC activity */
10277
+ if (cfs_lock_taken )
10278
+ {
10279
+ cfs_lock_taken = false;
10280
+ cfs_control_gc_unlock (); /* Restore CFS GC activity */
10281
+ }
10276
10282
}
10277
10283
10278
10284
/*
@@ -10472,6 +10478,7 @@ do_pg_stop_backup(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p)
10472
10478
/* Clean up session-level lock */
10473
10479
sessionBackupState = SESSION_BACKUP_NONE ;
10474
10480
10481
+ cfs_lock_taken = false;
10475
10482
cfs_control_gc_unlock (); /* Restore CFS GC activity */
10476
10483
10477
10484
/*
@@ -10717,7 +10724,11 @@ do_pg_abort_backup(void)
10717
10724
}
10718
10725
WALInsertLockRelease ();
10719
10726
10720
- cfs_control_gc_unlock (); /* Restore CFS GC activity */
10727
+ if (cfs_lock_taken )
10728
+ {
10729
+ cfs_lock_taken = false;
10730
+ cfs_control_gc_unlock (); /* Restore CFS GC activity */
10731
+ }
10721
10732
}
10722
10733
10723
10734
/*
0 commit comments