From eab5c8d101a4efbfa00f2c627943e5b18d74ef78 Mon Sep 17 00:00:00 2001 From: Nathan Bossart Date: Tue, 16 Sep 2025 22:11:47 -0500 Subject: [PATCH v2 1/1] fix LWLock shmem reinitialization --- src/backend/storage/lmgr/lwlock.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 46c82c63ca5..626f0fbdac1 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -192,6 +192,9 @@ typedef struct NamedLWLockTrancheRequest int NamedLWLockTrancheRequests = 0; NamedLWLockTrancheRequest *NamedLWLockTrancheRequestArray = NULL; +/* postmaster's local copy of the request array */ +static NamedLWLockTrancheRequest *LocalNamedLWLockTrancheRequestArray; + /* shared memory counter of registered tranches */ int *LWLockCounter = NULL; @@ -396,6 +399,9 @@ LWLockShmemSize(void) Size size; int numLocks = NUM_FIXED_LWLOCKS; + if (LocalNamedLWLockTrancheRequestArray) + NamedLWLockTrancheRequestArray = LocalNamedLWLockTrancheRequestArray; + /* Calculate total number of locks needed in the main array. */ numLocks += NumLWLocksForNamedTranches(); @@ -459,7 +465,7 @@ CreateLWLocks(void) { memcpy(ptr, NamedLWLockTrancheRequestArray, NamedLWLockTrancheRequests * sizeof(NamedLWLockTrancheRequest)); - pfree(NamedLWLockTrancheRequestArray); + LocalNamedLWLockTrancheRequestArray = NamedLWLockTrancheRequestArray; NamedLWLockTrancheRequestArray = (NamedLWLockTrancheRequest *) ptr; ptr += NamedLWLockTrancheRequests * sizeof(NamedLWLockTrancheRequest); } -- 2.39.5 (Apple Git-154)