diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 0d8849bf894..ee83669992b 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -2472,20 +2472,19 @@ BufferIsExclusiveLocked(Buffer buffer) { BufferDesc *bufHdr; + Assert(BufferIsPinned(buffer)); + if (BufferIsLocal(buffer)) { - int bufid = -buffer - 1; - - bufHdr = GetLocalBufferDescriptor(bufid); + /* Content locks are not maintained for local buffers. */ + return true; } else { bufHdr = GetBufferDescriptor(buffer - 1); + return LWLockHeldByMeInMode(BufferDescriptorGetContentLock(bufHdr), + LW_EXCLUSIVE); } - - Assert(BufferIsPinned(buffer)); - return LWLockHeldByMeInMode(BufferDescriptorGetContentLock(bufHdr), - LW_EXCLUSIVE); } /* @@ -2501,21 +2500,22 @@ BufferIsDirty(Buffer buffer) { BufferDesc *bufHdr; + Assert(BufferIsPinned(buffer)); + if (BufferIsLocal(buffer)) { int bufid = -buffer - 1; bufHdr = GetLocalBufferDescriptor(bufid); + /* Content locks are not maintained for local buffers. */ } else { bufHdr = GetBufferDescriptor(buffer - 1); + Assert(LWLockHeldByMeInMode(BufferDescriptorGetContentLock(bufHdr), + LW_EXCLUSIVE)); } - Assert(BufferIsPinned(buffer)); - Assert(LWLockHeldByMeInMode(BufferDescriptorGetContentLock(bufHdr), - LW_EXCLUSIVE)); - return pg_atomic_read_u32(&bufHdr->state) & BM_DIRTY; }