From 28a19b3732dcdf16c54640f776dd3445e33989aa Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Sat, 21 Mar 2026 19:05:26 +0200 Subject: [PATCH v7 12/18] Convert injection points to use the new interface --- src/backend/storage/ipc/ipci.c | 3 -- src/backend/utils/misc/injection_point.c | 60 ++++++++++++------------ src/include/storage/subsystemlist.h | 2 +- src/include/utils/injection_point.h | 3 -- 4 files changed, 30 insertions(+), 38 deletions(-) diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c index 7839899c987..afa7762e7dc 100644 --- a/src/backend/storage/ipc/ipci.c +++ b/src/backend/storage/ipc/ipci.c @@ -52,7 +52,6 @@ #include "storage/sinvaladt.h" #include "storage/subsystems.h" #include "utils/guc.h" -#include "utils/injection_point.h" #include "utils/wait_event.h" /* GUCs */ @@ -140,7 +139,6 @@ CalculateShmemSize(void) size = add_size(size, AsyncShmemSize()); size = add_size(size, StatsShmemSize()); size = add_size(size, WaitEventCustomShmemSize()); - size = add_size(size, InjectionPointShmemSize()); size = add_size(size, SlotSyncShmemSize()); size = add_size(size, AioShmemSize()); size = add_size(size, WaitLSNShmemSize()); @@ -351,7 +349,6 @@ CreateOrAttachShmemStructs(void) AsyncShmemInit(); StatsShmemInit(); WaitEventCustomShmemInit(); - InjectionPointShmemInit(); AioShmemInit(); WaitLSNShmemInit(); LogicalDecodingCtlShmemInit(); diff --git a/src/backend/utils/misc/injection_point.c b/src/backend/utils/misc/injection_point.c index c06b0e9b800..17b00c3162d 100644 --- a/src/backend/utils/misc/injection_point.c +++ b/src/backend/utils/misc/injection_point.c @@ -28,6 +28,7 @@ #include "storage/fd.h" #include "storage/lwlock.h" #include "storage/shmem.h" +#include "storage/subsystems.h" #include "utils/hsearch.h" #include "utils/memutils.h" @@ -109,6 +110,18 @@ typedef struct InjectionPointCacheEntry static HTAB *InjectionPointCache = NULL; +#ifdef USE_INJECTION_POINTS +static void InjectionPointShmemRequest(void *arg); +static void InjectionPointShmemInit(void *arg); +#endif + +const ShmemCallbacks InjectionPointShmemCallbacks = { +#ifdef USE_INJECTION_POINTS + .request_fn = InjectionPointShmemRequest, + .init_fn = InjectionPointShmemInit, +#endif +}; + /* * injection_point_cache_add * @@ -227,44 +240,29 @@ injection_point_cache_get(const char *name) #endif /* USE_INJECTION_POINTS */ /* - * Return the space for dynamic shared hash table. + * Reserve space for the dynamic shared hash table */ -Size -InjectionPointShmemSize(void) -{ #ifdef USE_INJECTION_POINTS - Size sz = 0; +static void +InjectionPointShmemRequest(void *arg) +{ + static ShmemStructDesc InjectionPointShmemDesc = { + .name = "InjectionPoint hash", + .size = sizeof(InjectionPointsCtl), + .ptr = (void **) &ActiveInjectionPoints, + }; - sz = add_size(sz, sizeof(InjectionPointsCtl)); - return sz; -#else - return 0; -#endif + ShmemRequestStruct(&InjectionPointShmemDesc); } -/* - * Allocate shmem space for dynamic shared hash. - */ -void -InjectionPointShmemInit(void) +static void +InjectionPointShmemInit(void *arg) { -#ifdef USE_INJECTION_POINTS - bool found; - - ActiveInjectionPoints = ShmemInitStruct("InjectionPoint hash", - sizeof(InjectionPointsCtl), - &found); - if (!IsUnderPostmaster) - { - Assert(!found); - pg_atomic_init_u32(&ActiveInjectionPoints->max_inuse, 0); - for (int i = 0; i < MAX_INJECTION_POINTS; i++) - pg_atomic_init_u64(&ActiveInjectionPoints->entries[i].generation, 0); - } - else - Assert(found); -#endif + pg_atomic_init_u32(&ActiveInjectionPoints->max_inuse, 0); + for (int i = 0; i < MAX_INJECTION_POINTS; i++) + pg_atomic_init_u64(&ActiveInjectionPoints->entries[i].generation, 0); } +#endif /* * Attach a new injection point. diff --git a/src/include/storage/subsystemlist.h b/src/include/storage/subsystemlist.h index ed43c90bcc3..65da6f17c5d 100644 --- a/src/include/storage/subsystemlist.h +++ b/src/include/storage/subsystemlist.h @@ -20,4 +20,4 @@ * of these matter. */ -/* TODO: empty for now */ +PG_SHMEM_SUBSYSTEM(InjectionPointShmemCallbacks) diff --git a/src/include/utils/injection_point.h b/src/include/utils/injection_point.h index 27a2526524f..fabd1455c3c 100644 --- a/src/include/utils/injection_point.h +++ b/src/include/utils/injection_point.h @@ -46,9 +46,6 @@ typedef void (*InjectionPointCallback) (const char *name, const void *private_data, void *arg); -extern Size InjectionPointShmemSize(void); -extern void InjectionPointShmemInit(void); - extern void InjectionPointAttach(const char *name, const char *library, const char *function, -- 2.47.3