pg.ddx.io pgsql-committers@postgresql.org mailing list archive
help / color / mirror / Atom feedFrom: Heikki Linnakangas <heikki.linnakangas@iki.fi>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Track which shmem areas have been fully initialized
Date: Fri, 28 Aug 2026 14:58:08 +0000
Message-ID: <E1wzy1v-00000002VYs-1QH8@gemulon.postgresql.org> (raw)
Track which shmem areas have been fully initialized
If SHMEM_CALLBACKS_ALLOW_AFTER_STARTUP is used to allocate shared
memory after startup, but the initialization fails half-way through,
the shmem area is left in an indeterminate state. Furthermore, if
multiple shmem areas are registered in one RegisterShmemCallbacks()
call, some might be allocated while others are not.
This commit adds an explicit 'initialized' flag to each shmem area.
We still leave behind an uninitialized area on error, but at least
they are now clearly marked, and you get a slightly nicer error
message if you try to re-register them. It'd be nice to clean up more
thoroughly and support actually retrying the allocations, but in
practice, the most likely reason for a shmem allocation or
initialization to fail is that you are out of shared memory and
retrying wouldn't help with that.
This isn't exactly a new problem, the old ShmemInitStruct() interface
had similar issues if the initialization code failed, or if you
allocated multiple structs and some allocations failed. It was just
left to the calling code to deal with it.
Author: Ayush Tiwari <ayushtiwari.slg01@gmail.com>
Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Discussion: https://www.postgresql.org/message-id/CAJTYsWVRRWH48=PcuAo_2Y4Ap6M0QRmzxgUfFkNRtdWK74LjBQ@mail.gmail...
Backpatch-through: 19
Branch
------
REL_19_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/9d888cd3f34c4e9a8f7fbe7e78c70bbd84a481de
Modified Files
--------------
doc/src/sgml/xfunc.sgml | 5 +-
src/backend/storage/ipc/shmem.c | 67 ++++++++++++++++++++--
src/test/modules/test_shmem/Makefile | 3 +
src/test/modules/test_shmem/meson.build | 3 +
.../modules/test_shmem/t/001_late_shmem_alloc.pl | 50 ++++++++++++++--
src/test/modules/test_shmem/test_shmem.c | 3 +
6 files changed, 120 insertions(+), 11 deletions(-)
view thread (2+ messages) latest in thread
Message-ID: <E1wzy1v-00000002VYs-1QH8@gemulon.postgresql.org>
Permalink: ../E1wzy1v-00000002VYs-1QH8@gemulon.postgresql.org/
Also on: postgresql.org/message-id/E1wzy1v-00000002VYs-1QH8@gemulon.postgresql.org
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-committers@postgresql.org
Cc: heikki.linnakangas@iki.fi, pgsql-committers@lists.postgresql.org
Subject: Re: pgsql: Track which shmem areas have been fully initialized
In-Reply-To: <E1wzy1v-00000002VYs-1QH8@gemulon.postgresql.org>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox