On Sun, Apr 05, 2026 at 11:27:44PM +0000, Heikki Linnakangas wrote: > Convert all remaining subsystems to use the new shmem allocation API > > This removes all remaining uses of ShmemInitStruct() and > ShmemInitHash() from built-in code. > > src/backend/utils/misc/injection_point.c | 57 ++++---
drongo, that compiles without USE_INJECTION_POINTS, is complaining
about this bit around line 240:
const ShmemCallbacks InjectionPointShmemCallbacks = {
#ifdef USE_INJECTION_POINTS
.request_fn = InjectionPointShmemRequest,
.init_fn = InjectionPointShmemInit,
#endif
};
Link:
https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=drongo&dt=2026-04-06%2004%3A09%3A20
And the error:
../pgsql/src/backend/utils/misc/injection_point.c(240): error C2059: syntax
error: '}'
Why not putting the whole InjectionPointShmemCallbacks inside a
USE_INJECTION_POINTS block? We should not care about shmem
allocations when --enable-injection-points is not used.
subsystemlist.h expects the callbacks to always be defined, so your
intention is to have no ifdefs there. Still, it seems a bit pointless
to me to define callbacks we are not going to use depending on the
build options evoked? Attached is one idea, which I doubt you'll
like. :)
--
Michael
diff --git a/src/include/storage/subsystemlist.h
b/src/include/storage/subsystemlist.h
index 5e092552c725..9ad619080be2 100644
--- a/src/include/storage/subsystemlist.h
+++ b/src/include/storage/subsystemlist.h
@@ -79,7 +79,9 @@ PG_SHMEM_SUBSYSTEM(SyncScanShmemCallbacks)
PG_SHMEM_SUBSYSTEM(AsyncShmemCallbacks)
PG_SHMEM_SUBSYSTEM(StatsShmemCallbacks)
PG_SHMEM_SUBSYSTEM(WaitEventCustomShmemCallbacks)
+#ifdef USE_INJECTION_POINTS
PG_SHMEM_SUBSYSTEM(InjectionPointShmemCallbacks)
+#endif
PG_SHMEM_SUBSYSTEM(WaitLSNShmemCallbacks)
PG_SHMEM_SUBSYSTEM(LogicalDecodingCtlShmemCallbacks)
PG_SHMEM_SUBSYSTEM(DataChecksumsShmemCallbacks)
diff --git a/src/backend/utils/misc/injection_point.c
b/src/backend/utils/misc/injection_point.c
index a7c99e097ea4..aa455c62bcc0 100644
--- a/src/backend/utils/misc/injection_point.c
+++ b/src/backend/utils/misc/injection_point.c
@@ -230,19 +230,15 @@ injection_point_cache_get(const char *name)
return NULL;
}
-#endif /* USE_INJECTION_POINTS
*/
const ShmemCallbacks InjectionPointShmemCallbacks = {
-#ifdef USE_INJECTION_POINTS
.request_fn = InjectionPointShmemRequest,
.init_fn = InjectionPointShmemInit,
-#endif
};
/*
* Reserve space for the dynamic shared hash table
*/
-#ifdef USE_INJECTION_POINTS
static void
InjectionPointShmemRequest(void *arg)
{
@@ -259,7 +255,7 @@ InjectionPointShmemInit(void *arg)
for (int i = 0; i < MAX_INJECTION_POINTS; i++)
pg_atomic_init_u64(&ActiveInjectionPoints->entries[i].generation, 0);
}
-#endif
+#endif /* USE_INJECTION_POINTS
*/
/*
* Attach a new injection point.
signature.asc
Description: PGP signature
