From f09518df76572adca85cba5008ea0cae5074603a Mon Sep 17 00:00:00 2001 From: "yizhi.fzh" Date: Fri, 19 Jan 2024 13:57:46 +0800 Subject: [PATCH v7 2/3] Treat (un)LockBufHdr as a SpinLock. The LockBufHdr also used init_local_spin_delay / perform_spin_delay infrastructure and so it is also possible that PANIC the system when it can't be acquired in a short time, and its code is pretty similar with s_lock. so treat it same as SPIN lock when regarding to misuse of spinlock detection. --- src/backend/storage/buffer/bufmgr.c | 1 + src/include/storage/buf_internals.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 7d601bef6d..c600a113cf 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -5409,6 +5409,7 @@ LockBufHdr(BufferDesc *desc) init_local_spin_delay(&delayStatus); + START_SPIN_LOCK(); while (true) { /* set BM_LOCKED flag */ diff --git a/src/include/storage/buf_internals.h b/src/include/storage/buf_internals.h index f190e6e5e4..6dc444da49 100644 --- a/src/include/storage/buf_internals.h +++ b/src/include/storage/buf_internals.h @@ -363,6 +363,7 @@ UnlockBufHdr(BufferDesc *desc, uint32 buf_state) { pg_write_barrier(); pg_atomic_write_u32(&desc->state, buf_state & (~BM_LOCKED)); + END_SPIN_LOCK(); } /* in bufmgr.c */ -- 2.34.1