ProcArrayApplyRecoveryInfo(RunningTransactions running)
{
TransactionId *xids;
+ TransactionId xid;
int nxids;
int i;
*/
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.
*/
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");