pgsql: Convert all remaining subsystems to use the new shmem allocation

Started by Heikki Linnakangas4 months ago3 messagescomitters
Jump to latest
#1Heikki Linnakangas
heikki.linnakangas@enterprisedb.com

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(-)

#2Michael Paquier
michael@paquier.xyz
In reply to: Heikki Linnakangas (#1)
Re: pgsql: Convert all remaining subsystems to use the new shmem allocation

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&amp;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
#3Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: Michael Paquier (#2)
Re: pgsql: Convert all remaining subsystems to use the new shmem allocation

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&amp;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