v7-0012-Convert-injection-points-to-use-the-new-interface.patch
text/x-patch
Filename: v7-0012-Convert-injection-points-to-use-the-new-interface.patch
Type: text/x-patch
Part: 11
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v7-0012
Subject: Convert injection points to use the new interface
| File | + | − |
|---|---|---|
| src/backend/storage/ipc/ipci.c | 0 | 3 |
| src/backend/utils/misc/injection_point.c | 29 | 31 |
| src/include/storage/subsystemlist.h | 1 | 1 |
| src/include/utils/injection_point.h | 0 | 3 |
From 28a19b3732dcdf16c54640f776dd3445e33989aa Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
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