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)
