From 3c0d6434661e1fa398abd5c617326673df9b86f1 Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Sat, 14 May 2022 17:12:49 +0900 Subject: [PATCH] shared library: update for PostgreSQL 15 Core commit 4f2400cb3f adds shmem_request_hook, meaning the memory initialization previously carried out in _PG_init() needs to be handled in that hook. --- repmgr.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/repmgr.c b/repmgr.c index 299cc00d..98ee4d78 100644 --- a/repmgr.c +++ b/repmgr.c @@ -80,11 +80,17 @@ typedef struct repmgrdSharedState static repmgrdSharedState *shared_state = NULL; +#if (PG_VERSION_NUM >= 150000) +static shmem_request_hook_type prev_shmem_request_hook = NULL; +#endif static shmem_startup_hook_type prev_shmem_startup_hook = NULL; - void _PG_init(void); +void _PG_fini(void); +#if (PG_VERSION_NUM >= 150000) +static void repmgr_shmem_request(void); +#endif static void repmgr_shmem_startup(void); PG_FUNCTION_INFO_V1(repmgr_set_local_node_id); @@ -116,24 +122,62 @@ _PG_init(void) if (!process_shared_preload_libraries_in_progress) return; +#if (PG_VERSION_NUM < 150000) RequestAddinShmemSpace(MAXALIGN(sizeof(repmgrdSharedState))); #if (PG_VERSION_NUM >= 90600) RequestNamedLWLockTranche(TRANCHE_NAME, 1); #else RequestAddinLWLocks(1); +#endif #endif /* * Install hooks. */ +#if (PG_VERSION_NUM >= 150000) + prev_shmem_request_hook = shmem_request_hook; + shmem_request_hook = repmgr_shmem_request; +#endif + prev_shmem_startup_hook = shmem_startup_hook; shmem_startup_hook = repmgr_shmem_startup; + } /* - * shmem_startup hook: allocate or attach to shared memory, + * Module unload callback + */ +void +_PG_fini(void) +{ + /* Uninstall hook */ +#if (PG_VERSION_NUM >= 150000) + shmem_request_hook = prev_shmem_request_hook; +#endif + + shmem_startup_hook = prev_shmem_startup_hook; +} + +#if (PG_VERSION_NUM >= 150000) +/* + * shmem_requst_hook: request shared memory + */ +static void +repmgr_shmem_request(void) +{ + if (prev_shmem_request_hook) + prev_shmem_request_hook(); + + RequestAddinShmemSpace(MAXALIGN(sizeof(repmgrdSharedState))); + + RequestNamedLWLockTranche(TRANCHE_NAME, 1); +} +#endif + +/* + * shmem_startup hook: allocate or attach to shared memory */ static void repmgr_shmem_startup(void)