diff options
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
-rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 30 |
1 files changed, 5 insertions, 25 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 2362423b89d..1c3dec487a1 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -636,20 +636,7 @@ ReadRecentBuffer(RelFileLocator rlocator, ForkNumber forkNum, BlockNumber blockN /* Is it still valid and holding the right tag? */ if ((buf_state & BM_VALID) && BufferTagsEqual(&tag, &bufHdr->tag)) { - /* - * Bump buffer's ref and usage counts. This is equivalent of - * PinBuffer for a shared buffer. - */ - if (LocalRefCount[b] == 0) - { - if (BUF_STATE_GET_USAGECOUNT(buf_state) < BM_MAX_USAGE_COUNT) - { - buf_state += BUF_USAGECOUNT_ONE; - pg_atomic_unlocked_write_u32(&bufHdr->state, buf_state); - } - } - LocalRefCount[b]++; - ResourceOwnerRememberBuffer(CurrentResourceOwner, recent_buffer); + PinLocalBuffer(bufHdr, true); pgBufferUsage.local_blks_hit++; @@ -1688,8 +1675,7 @@ ReleaseAndReadBuffer(Buffer buffer, BufTagMatchesRelFileLocator(&bufHdr->tag, &relation->rd_locator) && BufTagGetForkNum(&bufHdr->tag) == forkNum) return buffer; - ResourceOwnerForgetBuffer(CurrentResourceOwner, buffer); - LocalRefCount[-buffer - 1]--; + UnpinLocalBuffer(buffer); } else { @@ -3982,15 +3968,9 @@ ReleaseBuffer(Buffer buffer) elog(ERROR, "bad buffer ID: %d", buffer); if (BufferIsLocal(buffer)) - { - ResourceOwnerForgetBuffer(CurrentResourceOwner, buffer); - - Assert(LocalRefCount[-buffer - 1] > 0); - LocalRefCount[-buffer - 1]--; - return; - } - - UnpinBuffer(GetBufferDescriptor(buffer - 1)); + UnpinLocalBuffer(buffer); + else + UnpinBuffer(GetBufferDescriptor(buffer - 1)); } /* |