From de129e5a261ed43f002c1684dc9d6575f3880b16 Mon Sep 17 00:00:00 2001 From: Kyotaro Horiguchi Date: Thu, 6 Feb 2020 14:31:36 +0900 Subject: [PATCH 1/2] debug aid --- src/backend/access/nbtree/nbtsearch.c | 1 + src/backend/storage/buffer/bufmgr.c | 13 +++++++++++++ src/include/storage/bufmgr.h | 1 + 3 files changed, 15 insertions(+) diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index c5f5d228f2..5cd97d8bb5 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -1785,6 +1785,7 @@ _bt_readpage(IndexScanDesc scan, ScanDirection dir, OffsetNumber offnum) * used here; this function is what makes it good for currPos. */ Assert(BufferIsValid(so->currPos.buf)); + Assert(BufferLockAndPinHeldByMe(so->currPos.buf)); page = BufferGetPage(so->currPos.buf); opaque = (BTPageOpaque) PageGetSpecialPointer(page); diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index aba3960481..08a75a6846 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -1553,6 +1553,19 @@ ReleaseAndReadBuffer(Buffer buffer, return ReadBuffer(relation, blockNum); } +/* tmp function for debugging */ +bool +BufferLockAndPinHeldByMe(Buffer buffer) +{ + BufferDesc *b = GetBufferDescriptor(buffer - 1); + + if (BufferIsPinned(buffer) && + LWLockHeldByMe(BufferDescriptorGetContentLock(b))) + return true; + + return false; +} + /* * PinBuffer -- make buffer unavailable for replacement. * diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 73c7e9ba38..8e5fc639a0 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -177,6 +177,7 @@ extern void MarkBufferDirty(Buffer buffer); extern void IncrBufferRefCount(Buffer buffer); extern Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum); +extern bool BufferLockAndPinHeldByMe(Buffer buffer); extern void InitBufferPool(void); extern void InitBufferPoolAccess(void); -- 2.18.2