{
TransactionId xmax,
xmin;
-
- XLogRecPtr snapshotlsn;
+ XLogRecPtr snapshotlsn;
+ bool takenDuringRecovery;
Assert(snapshot != NULL);
- snapshot->takenDuringRecovery = RecoveryInProgress();
+ takenDuringRecovery = RecoveryInProgress();
LWLockAcquire(ProcArrayLock, LW_SHARED);
- snapshotlsn = GetXLogInsertRecPtr();
+ if (takenDuringRecovery)
+ {
+ TimeLineID tli;
+ snapshotlsn = GetXLogReplayRecPtr(&tli);
+ }
+ else
+ snapshotlsn = GetXLogInsertRecPtr();
if (MyPgXact->snapshotlsn == InvalidXLogRecPtr)
MyPgXact->snapshotlsn = snapshotlsn;
snapshot->xmax = xmax;
snapshot->snapshotlsn = snapshotlsn;
snapshot->curcid = GetCurrentCommandId(false);
+ snapshot->takenDuringRecovery = takenDuringRecovery;
/*
* Update global variables too