diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index c532ca716d1..8aabf5991b0 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -3742,23 +3742,19 @@ RelationCopyStorageUsingBuffer(Relation src, Relation dst, ForkNumber forkNum, srcBuf = ReadBufferWithoutRelcache(src->rd_node, 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_node, 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); @@ -3769,7 +3765,7 @@ RelationCopyStorageUsingBuffer(Relation src, Relation dst, ForkNumber forkNum, END_CRIT_SECTION(); UnlockReleaseBuffer(dstBuf); - ReleaseBuffer(srcBuf); + UnlockReleaseBuffer(srcBuf); } }