From 219d2fea28e689389cc98c1e8242bd9ecada6318 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 28 Mar 2022 20:49:14 -0700 Subject: [PATCH v68 04/31] dsm: allow use in single user mode. This is mostly useful for the shared memory stats, to avoid a dedicated code path for single user mode. --- src/backend/storage/ipc/dsm.c | 9 +++++++-- src/backend/storage/ipc/dsm_impl.c | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/backend/storage/ipc/dsm.c b/src/backend/storage/ipc/dsm.c index e9e9fae3eb9..00a8c08ea39 100644 --- a/src/backend/storage/ipc/dsm.c +++ b/src/backend/storage/ipc/dsm.c @@ -397,6 +397,7 @@ static void dsm_backend_startup(void) { #ifdef EXEC_BACKEND + if (IsUnderPostmaster) { void *control_address = NULL; @@ -496,8 +497,12 @@ dsm_create(Size size, int flags) FreePageManager *dsm_main_space_fpm = dsm_main_space_begin; bool using_main_dsm_region = false; - /* Unsafe in postmaster (and pointless in a stand-alone backend). */ - Assert(IsUnderPostmaster); + /* + * Unsafe in postmaster. Might seem pointless to allow in single user + * mode, but this way subsystems do not need dedicated single user mode + * paths. + */ + Assert(IsUnderPostmaster || !IsPostmasterEnvironment); if (!dsm_init_done) dsm_backend_startup(); diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c index 49f4c98620c..6ec865612f1 100644 --- a/src/backend/storage/ipc/dsm_impl.c +++ b/src/backend/storage/ipc/dsm_impl.c @@ -959,6 +959,7 @@ dsm_impl_pin_segment(dsm_handle handle, void *impl_private, { #ifdef USE_DSM_WINDOWS case DSM_IMPL_WINDOWS: + if (IsUnderPostmaster) { HANDLE hmap; @@ -984,8 +985,8 @@ dsm_impl_pin_segment(dsm_handle handle, void *impl_private, * is unpinned, dsm_impl_unpin_segment can close it. */ *impl_private_pm_handle = hmap; - break; } + break; #endif default: break; @@ -1008,6 +1009,7 @@ dsm_impl_unpin_segment(dsm_handle handle, void **impl_private) { #ifdef USE_DSM_WINDOWS case DSM_IMPL_WINDOWS: + if (IsUnderPostmaster) { if (*impl_private && !DuplicateHandle(PostmasterHandle, *impl_private, -- 2.35.1.677.gabf474a5dd