diff options
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
-rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 6b30138ab32..8ef0436c521 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -3741,23 +3741,19 @@ RelationCopyStorageUsingBuffer(Relation src, Relation dst, ForkNumber forkNum, srcBuf = ReadBufferWithoutRelcache(src->rd_locator, forkNum, blkno, RBM_NORMAL, bstrategy_src, permanent); + LockBuffer(srcBuf, BUFFER_LOCK_SHARE); srcPage = BufferGetPage(srcBuf); - if (PageIsNew(srcPage) || PageIsEmpty(srcPage)) - { - ReleaseBuffer(srcBuf); - continue; - } /* Use P_NEW to extend the destination relation. */ dstBuf = ReadBufferWithoutRelcache(dst->rd_locator, forkNum, P_NEW, RBM_NORMAL, bstrategy_dst, permanent); LockBuffer(dstBuf, BUFFER_LOCK_EXCLUSIVE); + dstPage = BufferGetPage(dstBuf); START_CRIT_SECTION(); /* Copy page data from the source to the destination. */ - dstPage = BufferGetPage(dstBuf); memcpy(dstPage, srcPage, BLCKSZ); MarkBufferDirty(dstBuf); @@ -3768,7 +3764,7 @@ RelationCopyStorageUsingBuffer(Relation src, Relation dst, ForkNumber forkNum, END_CRIT_SECTION(); UnlockReleaseBuffer(dstBuf); - ReleaseBuffer(srcBuf); + UnlockReleaseBuffer(srcBuf); } } |