0001-test_slru-Fix-LWLock-allocation-logic.patch
text/plain
Filename: 0001-test_slru-Fix-LWLock-allocation-logic.patch
Type: text/plain
Part: 0
From ad64c6a38603f8606674e16c9830084eff4b54d4 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Mon, 18 May 2026 20:27:34 +0900
Subject: [PATCH] test_slru: Fix LWLock allocation logic
Only for REL_16_STABLE, per report from buildfarm members gokiburi.
---
src/test/modules/test_slru/test_slru.c | 36 +++++++++++++++++++-------
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/src/test/modules/test_slru/test_slru.c b/src/test/modules/test_slru/test_slru.c
index ae21444c4763..72b4c66658b8 100644
--- a/src/test/modules/test_slru/test_slru.c
+++ b/src/test/modules/test_slru/test_slru.c
@@ -40,9 +40,16 @@ PG_FUNCTION_INFO_V1(test_slru_delete_all);
/* Number of SLRU page slots */
#define NUM_TEST_BUFFERS 16
-/* SLRU control lock */
-LWLock TestSLRULock;
-#define TestSLRULock (&TestSLRULock)
+typedef struct TestSlruSharedState
+{
+ /* SLRU control lock */
+ LWLock lock;
+} TestSlruSharedState;
+
+/* Pointer to shared-memory state. */
+static TestSlruSharedState *test_slru_state = NULL;
+
+#define TestSLRULock (&test_slru_state->lock)
static SlruCtlData TestSlruCtlData;
#define TestSlruCtl (&TestSlruCtlData)
@@ -202,6 +209,7 @@ test_slru_shmem_request(void)
/* reserve shared memory for the test SLRU */
RequestAddinShmemSpace(SimpleLruShmemSize(NUM_TEST_BUFFERS, 0));
+ RequestAddinShmemSpace(MAXALIGN(sizeof(TestSlruSharedState)));
}
static bool
@@ -214,7 +222,7 @@ static void
test_slru_shmem_startup(void)
{
const char slru_dir_name[] = "pg_test_slru";
- int test_tranche_id;
+ bool found;
if (prev_shmem_startup_hook)
prev_shmem_startup_hook();
@@ -225,15 +233,25 @@ test_slru_shmem_startup(void)
*/
(void) MakePGDirectory(slru_dir_name);
- /* initialize the SLRU facility */
- test_tranche_id = LWLockNewTrancheId();
- LWLockRegisterTranche(test_tranche_id, "test_slru_tranche");
- LWLockInitialize(TestSLRULock, test_tranche_id);
+ LWLockAcquire(AddinShmemInitLock, LW_EXCLUSIVE);
+ test_slru_state = ShmemInitStruct("test_slru",
+ sizeof(TestSlruSharedState),
+ &found);
+ if (!found)
+ {
+ /* First time through ... */
+ LWLockInitialize(&test_slru_state->lock, LWLockNewTrancheId());
+ LWLockRegisterTranche(test_slru_state->lock.tranche, "test_slru");
+ }
+
+ LWLockRelease(AddinShmemInitLock);
+
+ /* initialize the SLRU facility */
TestSlruCtl->PagePrecedes = test_slru_page_precedes_logically;
SimpleLruInit(TestSlruCtl, "TestSLRU",
NUM_TEST_BUFFERS, 0, TestSLRULock, slru_dir_name,
- test_tranche_id, SYNC_HANDLER_NONE);
+ test_slru_state->lock.tranche, SYNC_HANDLER_NONE);
}
void
--
2.54.0