From 96f869371e77e21047e1b842692872d3ebf445de Mon Sep 17 00:00:00 2001
From: "Rui Zhao" <xiyuan.zr@alibaba-inc.com>
Date: Mon, 29 Jul 2024 16:55:04 +0800
Subject: [PATCH] Detach shared memory in Postmaster child if not needed

---
 src/backend/postmaster/launch_backend.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/backend/postmaster/launch_backend.c b/src/backend/postmaster/launch_backend.c
index 8d4589846a..0037772c4f 100644
--- a/src/backend/postmaster/launch_backend.c
+++ b/src/backend/postmaster/launch_backend.c
@@ -219,7 +219,8 @@ PostmasterChildName(BackendType child_type)
  * Start a new postmaster child process.
  *
  * The child process will be restored to roughly the same state whether
- * EXEC_BACKEND is used or not: it will be attached to shared memory, and fds
+ * EXEC_BACKEND is used or not: it will be attached to shared memory if
+ * shmem_attach is set to true and will be detached if it is not, and fds
  * and other resources that we've inherited from postmaster that are not
  * needed in a child process have been closed.
  *
@@ -249,6 +250,13 @@ postmaster_child_launch(BackendType child_type,
 		/* Detangle from postmaster */
 		InitPostmasterChild();
 
+		/* Detach from shared memory if it is not needed. */
+		if (!child_process_kinds[child_type].shmem_attach)
+		{
+			dsm_detach_all();
+			PGSharedMemoryDetach();
+		}
+
 		/*
 		 * Enter the Main function with TopMemoryContext.  The startup data is
 		 * allocated in PostmasterContext, so we cannot release it here yet.
-- 
2.39.3

