diff options
-rw-r--r-- | src/backend/storage/ipc/procarray.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index e2f71da4a01..93cdc97166c 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -1053,6 +1053,7 @@ void ProcArrayApplyRecoveryInfo(RunningTransactions running) { TransactionId *xids; + TransactionId xid; int nxids; int i; @@ -1067,6 +1068,16 @@ ProcArrayApplyRecoveryInfo(RunningTransactions running) ExpireOldKnownAssignedTransactionIds(running->oldestRunningXid); /* + * Adjust TransamVariables->nextXid before StandbyReleaseOldLocks(), + * because we will need it up to date for accessing two-phase transactions + * in StandbyReleaseOldLocks(). + */ + xid = running->nextXid; + TransactionIdRetreat(xid); + AdvanceNextFullTransactionIdPastXid(xid); + Assert(FullTransactionIdIsValid(TransamVariables->nextXid)); + + /* * Remove stale locks, if any. */ StandbyReleaseOldLocks(running->oldestRunningXid); @@ -1275,11 +1286,6 @@ ProcArrayApplyRecoveryInfo(RunningTransactions running) LWLockRelease(ProcArrayLock); - /* TransamVariables->nextXid must be beyond any observed xid. */ - AdvanceNextFullTransactionIdPastXid(latestObservedXid); - - Assert(FullTransactionIdIsValid(TransamVariables->nextXid)); - KnownAssignedXidsDisplay(DEBUG3); if (standbyState == STANDBY_SNAPSHOT_READY) elog(DEBUG1, "recovery snapshots are now enabled"); |