pgsql: Convert all remaining subsystems to use the new shmem allocation
Convert all remaining subsystems to use the new shmem allocation API
This removes all remaining uses of ShmemInitStruct() and
ShmemInitHash() from built-in code.
Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Reviewed-by: Matthias van de Meent <boekewurm+postgres@gmail.com>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Discussion: /messages/by-id/CAExHW5vM1bneLYfg0wGeAa=52UiJ3z4vKd3AJ72X8Fw6k3KKrg@mail.gmail.com
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/9b5acad3f40fa6015f367fbf887ae5c1a93a3698
Modified Files
--------------
src/backend/access/common/syncscan.c | 76 +++++----
src/backend/access/nbtree/nbtutils.c | 54 ++++---
src/backend/access/transam/twophase.c | 75 ++++-----
src/backend/access/transam/xlog.c | 82 +++++-----
src/backend/access/transam/xlogprefetcher.c | 51 +++---
src/backend/access/transam/xlogrecovery.c | 35 +++--
src/backend/access/transam/xlogwait.c | 50 +++---
src/backend/postmaster/autovacuum.c | 79 +++++-----
src/backend/postmaster/bgworker.c | 105 ++++++-------
src/backend/postmaster/checkpointer.c | 56 +++----
src/backend/postmaster/datachecksum_state.c | 41 ++---
src/backend/postmaster/pgarch.c | 43 +++--
src/backend/postmaster/walsummarizer.c | 60 +++----
src/backend/replication/logical/launcher.c | 56 +++----
src/backend/replication/logical/logicalctl.c | 29 ++--
src/backend/replication/logical/origin.c | 59 ++++---
src/backend/replication/logical/slotsync.c | 41 ++---
src/backend/replication/slot.c | 64 ++++----
src/backend/replication/walreceiverfuncs.c | 51 +++---
src/backend/replication/walsender.c | 59 ++++---
src/backend/storage/ipc/ipci.c | 124 +--------------
src/backend/storage/lmgr/lock.c | 109 +++++--------
src/backend/utils/activity/backend_status.c | 173 ++++++++-------------
src/backend/utils/activity/pgstat_shmem.c | 158 ++++++++++---------
src/backend/utils/activity/wait_event.c | 83 +++++-----
src/backend/utils/misc/injection_point.c | 57 ++++---
src/include/access/nbtree.h | 2 -
src/include/access/syncscan.h | 2 -
src/include/access/twophase.h | 3 -
src/include/access/xlog.h | 2 -
src/include/access/xlogprefetcher.h | 3 -
src/include/access/xlogrecovery.h | 3 -
src/include/access/xlogwait.h | 2 -
src/include/pgstat.h | 4 -
src/include/postmaster/autovacuum.h | 4 -
src/include/postmaster/bgworker_internals.h | 2 -
src/include/postmaster/bgwriter.h | 3 -
src/include/postmaster/datachecksum_state.h | 4 -
src/include/postmaster/pgarch.h | 2 -
src/include/postmaster/walsummarizer.h | 2 -
src/include/replication/logicalctl.h | 2 -
src/include/replication/logicallauncher.h | 3 -
src/include/replication/origin.h | 4 -
src/include/replication/slot.h | 4 -
src/include/replication/slotsync.h | 2 -
src/include/replication/walreceiver.h | 2 -
src/include/replication/walsender.h | 2 -
src/include/storage/lock.h | 2 -
src/include/storage/subsystemlist.h | 27 ++++
src/include/utils/backend_status.h | 8 -
src/include/utils/injection_point.h | 3 -
src/include/utils/wait_event.h | 2 -
.../modules/injection_points/injection_points.c | 59 +++----
src/test/modules/test_aio/test_aio.c | 107 ++++++-------
54 files changed, 927 insertions(+), 1208 deletions(-)
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
Attachments:
inj-shmem-subsystem.patchtext/plain; charset=us-asciiDownload+3-5
On 06/04/2026 08:41, Michael Paquier wrote:
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: '}'
Oh, I didn't realize that that an empty initializer isn't allowed.
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. :)
Looks perfectly fine to me, I'll push that. Thanks!
- Heikki