@@ -6760,6 +6760,7 @@ GetLastWrittenLSNv(RelFileLocator relfilenode, ForkNumber forknum,
67606760 BlockNumber blkno , int nblocks , XLogRecPtr * lsns )
67616761{
67626762 LastWrittenLsnCacheEntry * entry ;
6763+ XLogRecPtr lsn ;
67636764
67646765 Assert (lastWrittenLsnCacheSize != 0 );
67656766 Assert (nblocks > 0 );
@@ -6785,7 +6786,7 @@ GetLastWrittenLSNv(RelFileLocator relfilenode, ForkNumber forknum,
67856786 entry = hash_search (lastWrittenLsnCache , & key , HASH_FIND , NULL );
67866787 if (entry != NULL )
67876788 {
6788- lsns [i ] = entry -> lsn ;
6789+ lsns [i ] = entry -> lsn ;
67896790 }
67906791 else
67916792 {
@@ -6804,19 +6805,22 @@ GetLastWrittenLSNv(RelFileLocator relfilenode, ForkNumber forknum,
68046805 LWLockRelease (LastWrittenLsnLock );
68056806 LWLockAcquire (LastWrittenLsnLock , LW_EXCLUSIVE );
68066807
6808+ lsn = XLogCtl -> maxLastWrittenLsn ;
6809+
68076810 for (int i = 0 ; i < nblocks ; i ++ )
68086811 {
68096812 if (lsns [i ] == InvalidXLogRecPtr )
68106813 {
6811- SetLastWrittenLSNForBlockRangeInternal (XLogCtl -> maxLastWrittenLsn , relfilenode , forknum , blkno + i , 1 );
6814+ lsns [i ] = lsn ;
6815+ SetLastWrittenLSNForBlockRangeInternal (lsn , relfilenode , forknum , blkno + i , 1 );
68126816 }
68136817 }
68146818 }
68156819 }
68166820 else
68176821 {
68186822 HASH_SEQ_STATUS seq ;
6819- XLogRecPtr lsn = XLogCtl -> maxLastWrittenLsn ;
6823+ lsn = XLogCtl -> maxLastWrittenLsn ;
68206824 /* Find maximum of all cached LSNs */
68216825 hash_seq_init (& seq , lastWrittenLsnCache );
68226826 while ((entry = (LastWrittenLsnCacheEntry * ) hash_seq_search (& seq )) != NULL )
0 commit comments