aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/init/miscinit.c
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2022-05-13 09:31:06 -0400
committerRobert Haas <rhaas@postgresql.org>2022-05-13 09:31:06 -0400
commit4f2400cb3f10aa79f99fba680c198237da28dd38 (patch)
tree4f96c3499f0ad60ee18431317e7068a21f498358 /src/backend/utils/init/miscinit.c
parent8c8d307f82976122980bbccf940319d1b8a71403 (diff)
downloadpostgresql-4f2400cb3f10aa79f99fba680c198237da28dd38.tar.gz
postgresql-4f2400cb3f10aa79f99fba680c198237da28dd38.zip
Add a new shmem_request_hook hook.
Currently, preloaded libraries are expected to request additional shared memory and LWLocks in _PG_init(). However, it is not unusal for such requests to depend on MaxBackends, which won't be initialized at that time. Such requests could also depend on GUCs that other modules might change. This introduces a new hook where modules can safely use MaxBackends and GUCs to request additional shared memory and LWLocks. Furthermore, this change restricts requests for shared memory and LWLocks to this hook. Previously, libraries could make requests until the size of the main shared memory segment was calculated. Unlike before, we no longer silently ignore requests received at invalid times. Instead, we FATAL if someone tries to request additional shared memory or LWLocks outside of the hook. Nathan Bossart and Julien Rouhaud Discussion: https://postgr.es/m/20220412210112.GA2065815%40nathanxps13 Discussion: https://postgr.es/m/Yn2jE/lmDhKtkUdr@paquier.xyz
Diffstat (limited to 'src/backend/utils/init/miscinit.c')
-rw-r--r--src/backend/utils/init/miscinit.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 6ed584e1143..ec6a61594a4 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -1618,6 +1618,9 @@ char *local_preload_libraries_string = NULL;
bool process_shared_preload_libraries_in_progress = false;
bool process_shared_preload_libraries_done = false;
+shmem_request_hook_type shmem_request_hook = NULL;
+bool process_shmem_requests_in_progress = false;
+
/*
* load the shared libraries listed in 'libraries'
*
@@ -1701,6 +1704,18 @@ process_session_preload_libraries(void)
true);
}
+/*
+ * process any shared memory requests from preloaded libraries
+ */
+void
+process_shmem_requests(void)
+{
+ process_shmem_requests_in_progress = true;
+ if (shmem_request_hook)
+ shmem_request_hook();
+ process_shmem_requests_in_progress = false;
+}
+
void
pg_bindtextdomain(const char *domain)
{