]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Revert "Teach DSM registry to ERROR if attaching to an uninitialized entry."
authorNathan Bossart <nathan@postgresql.org>
Wed, 26 Nov 2025 17:37:21 +0000 (11:37 -0600)
committerNathan Bossart <nathan@postgresql.org>
Wed, 26 Nov 2025 17:37:21 +0000 (11:37 -0600)
This reverts commit 1165a933aa (and the corresponding commits on
the back-branches).  In a follow-up commit, we'll teach the
registry to retry entry initialization instead of leaving it in a
permanently failed state.

Reviewed-by: Robert Haas <robertmhaas@gmail.com>
Discussion: https://postgr.es/m/E1vJHUk-006I7r-37%40gemulon.postgresql.org
Backpatch-through: 17

src/backend/storage/ipc/dsm_registry.c

index 8511b7afc7bb4d72ae631eccdff2822eb3953494..1d4fd31ffedbc4b6342b5189fdd3244fd89cc170 100644 (file)
@@ -45,7 +45,6 @@ typedef struct DSMRegistryEntry
        char            name[64];
        dsm_handle      handle;
        size_t          size;
-       bool            initialized;
 } DSMRegistryEntry;
 
 static const dshash_parameters dsh_params = {
@@ -159,12 +158,8 @@ GetNamedDSMSegment(const char *name, size_t size,
        entry = dshash_find_or_insert(dsm_registry_table, name, found);
        if (!(*found))
        {
-               dsm_segment *seg;
-
-               entry->initialized = false;
-
                /* Initialize the segment. */
-               seg = dsm_create(size, 0);
+               dsm_segment *seg = dsm_create(size, 0);
 
                dsm_pin_segment(seg);
                dsm_pin_mapping(seg);
@@ -174,17 +169,13 @@ GetNamedDSMSegment(const char *name, size_t size,
 
                if (init_callback)
                        (*init_callback) (ret);
-
-               entry->initialized = true;
        }
-       else if (!entry->initialized)
-               ereport(ERROR,
-                               (errmsg("requested DSM segment \"%s\" failed initialization",
-                                               name)));
        else if (entry->size != size)
+       {
                ereport(ERROR,
-                               (errmsg("requested DSM segment \"%s\" does not match size of existing entry",
-                                               name)));
+                               (errmsg("requested DSM segment size does not match size of "
+                                               "existing segment")));
+       }
        else
        {
                dsm_segment *seg = dsm_find_mapping(entry->handle);