Skip to content

Commit 0f8da73

Browse files
author
Konstantin Knizhnik
committed
Fix bug in GetLastWrittenLSNv
1 parent e0b3210 commit 0f8da73

File tree

1 file changed

+7
-3
lines changed
  • src/backend/access/transam

1 file changed

+7
-3
lines changed

src/backend/access/transam/xlog.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)