diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 702ea7c..bdae7a4 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -5822,6 +5822,7 @@ StartupXLOG(void) */ do { + TimeLineID EndTLI; #ifdef WAL_DEBUG if (XLOG_DEBUG || (rmid == RM_XACT_ID && trace_recovery_messages <= DEBUG2) || @@ -5895,8 +5896,20 @@ StartupXLOG(void) * Update shared replayEndRecPtr before replaying this record, * so that XLogFlush will update minRecoveryPoint correctly. */ + if (record->xl_rmid == RM_XLOG_ID && + (record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN) + { + CheckPoint checkPoint; + + memcpy(&checkPoint, XLogRecGetData(record), sizeof(CheckPoint)); + EndTLI = checkPoint.ThisTimeLineID; + } + else + EndTLI = ThisTimeLineID; + SpinLockAcquire(&xlogctl->info_lck); xlogctl->replayEndRecPtr = EndRecPtr; + xlogctl->replayEndTLI = EndTLI; recoveryPause = xlogctl->recoveryPause; SpinLockRelease(&xlogctl->info_lck);