From f47672274dcc84b1b2faa5a853c3c862a7f68cb5 Mon Sep 17 00:00:00 2001 From: "tender.wang" Date: Wed, 27 Dec 2023 00:17:02 +0800 Subject: [PATCH] Fix local buf_state error. --- src/backend/storage/buffer/localbuf.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index d1cdd3eeb4..2457b7455c 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -380,26 +380,20 @@ ExtendBufferedRelLocal(BufferManagerRelation bmr, hash_search(LocalBufHash, (void *) &tag, HASH_ENTER, &found); if (found) { - BufferDesc *existing_hdr = GetLocalBufferDescriptor(hresult->id); - uint32 buf_state; + BufferDesc *existing_hdr; UnpinLocalBuffer(BufferDescriptorGetBuffer(victim_buf_hdr)); existing_hdr = GetLocalBufferDescriptor(hresult->id); - PinLocalBuffer(existing_hdr, false); + Assert(BufferTagsEqual(&existing_hdr->tag, &tag)); + PinLocalBuffer(existing_hdr, false); buffers[i] = BufferDescriptorGetBuffer(existing_hdr); - - buf_state = pg_atomic_read_u32(&existing_hdr->state); - Assert(buf_state & BM_TAG_VALID); - Assert(!(buf_state & BM_DIRTY)); - buf_state &= BM_VALID; - pg_atomic_unlocked_write_u32(&existing_hdr->state, buf_state); } else { uint32 buf_state = pg_atomic_read_u32(&victim_buf_hdr->state); - Assert(!(buf_state & (BM_VALID | BM_TAG_VALID | BM_DIRTY | BM_JUST_DIRTIED))); + buf_state &= ~(BUF_FLAG_MASK | BUF_USAGECOUNT_MASK); victim_buf_hdr->tag = tag; -- 2.25.1