diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 2f5d603066..a2ea03506a 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -1940,6 +1940,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic) * already written out. */ OldPageRqstPtr = XLogCtl->xlblocks[nextidx]; + Assert(OldPageRqstPtr <= XLogCtl->InitializedUpTo); if (LogwrtResult.Write < OldPageRqstPtr) { /* @@ -1970,6 +1971,10 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic) */ LWLockRelease(WALBufMappingLock); + /* we should exit the loop before reaching a page beyond the + * requested 'upto' position. */ + Assert(OldPageRqstPtr <= upto || opportunistic); + WaitXLogInsertionsToFinish(OldPageRqstPtr); LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);