diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c
index 46c82c63ca5..694e9e33510 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;
 
@@ -382,7 +385,7 @@ NumLWLocksForNamedTranches(void)
 	int			i;
 
 	for (i = 0; i < NamedLWLockTrancheRequests; i++)
-		numLocks += NamedLWLockTrancheRequestArray[i].num_lwlocks;
+		numLocks += LocalNamedLWLockTrancheRequestArray[i].num_lwlocks;
 
 	return numLocks;
 }
@@ -457,9 +460,8 @@ CreateLWLocks(void)
 		 */
 		if (NamedLWLockTrancheRequests > 0)
 		{
-			memcpy(ptr, NamedLWLockTrancheRequestArray,
+			memcpy(ptr, LocalNamedLWLockTrancheRequestArray,
 				   NamedLWLockTrancheRequests * sizeof(NamedLWLockTrancheRequest));
-			pfree(NamedLWLockTrancheRequestArray);
 			NamedLWLockTrancheRequestArray = (NamedLWLockTrancheRequest *) ptr;
 			ptr += NamedLWLockTrancheRequests * sizeof(NamedLWLockTrancheRequest);
 		}
@@ -648,10 +650,10 @@ RequestNamedLWLockTranche(const char *tranche_name, int num_lwlocks)
 				 errdetail("LWLock tranche names must be no longer than %d bytes.",
 						   NAMEDATALEN - 1)));
 
-	if (NamedLWLockTrancheRequestArray == NULL)
+	if (LocalNamedLWLockTrancheRequestArray == NULL)
 	{
 		NamedLWLockTrancheRequestsAllocated = 16;
-		NamedLWLockTrancheRequestArray = (NamedLWLockTrancheRequest *)
+		LocalNamedLWLockTrancheRequestArray = (NamedLWLockTrancheRequest *)
 			MemoryContextAlloc(TopMemoryContext,
 							   NamedLWLockTrancheRequestsAllocated
 							   * sizeof(NamedLWLockTrancheRequest));
@@ -661,13 +663,13 @@ RequestNamedLWLockTranche(const char *tranche_name, int num_lwlocks)
 	{
 		int			i = pg_nextpower2_32(NamedLWLockTrancheRequests + 1);
 
-		NamedLWLockTrancheRequestArray = (NamedLWLockTrancheRequest *)
-			repalloc(NamedLWLockTrancheRequestArray,
+		LocalNamedLWLockTrancheRequestArray = (NamedLWLockTrancheRequest *)
+			repalloc(LocalNamedLWLockTrancheRequestArray,
 					 i * sizeof(NamedLWLockTrancheRequest));
 		NamedLWLockTrancheRequestsAllocated = i;
 	}
 
-	request = &NamedLWLockTrancheRequestArray[NamedLWLockTrancheRequests];
+	request = &LocalNamedLWLockTrancheRequestArray[NamedLWLockTrancheRequests];
 	strlcpy(request->tranche_name, tranche_name, NAMEDATALEN);
 	request->num_lwlocks = num_lwlocks;
 	NamedLWLockTrancheRequests++;
-- 
2.39.5 (Apple Git-154)
