Make some use of anonymous unions [DSM registry].
authorNathan Bossart <nathan@postgresql.org>
Fri, 3 Oct 2025 15:14:33 +0000 (10:14 -0500)
committerNathan Bossart <nathan@postgresql.org>
Fri, 3 Oct 2025 15:14:33 +0000 (10:14 -0500)
Make some use of anonymous unions, which are allowed as of C11, as
examples and encouragement for future code, and to test compilers.

This commit changes the DSMRegistryEntry struct.

Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Discussion: https://postgr.es/m/aNKsDg0fJwqhZdXX%40nathan

src/backend/storage/ipc/dsm_registry.c

index 971309251062d6a86888f9b6f7a09e1363df3c02..a926b9c3f32f953686c24ea61365432a2653798e 100644 (file)
@@ -98,7 +98,7 @@ typedef struct DSMRegistryEntry
        NamedDSMState dsm;
        NamedDSAState dsa;
        NamedDSHState dsh;
-   }           data;
+   };
 } DSMRegistryEntry;
 
 static const dshash_parameters dsh_params = {
@@ -212,7 +212,7 @@ GetNamedDSMSegment(const char *name, size_t size,
    entry = dshash_find_or_insert(dsm_registry_table, name, found);
    if (!(*found))
    {
-       NamedDSMState *state = &entry->data.dsm;
+       NamedDSMState *state = &entry->dsm;
        dsm_segment *seg;
 
        entry->type = DSMR_ENTRY_TYPE_DSM;
@@ -232,12 +232,12 @@ GetNamedDSMSegment(const char *name, size_t size,
    else if (entry->type != DSMR_ENTRY_TYPE_DSM)
        ereport(ERROR,
                (errmsg("requested DSM segment does not match type of existing entry")));
-   else if (entry->data.dsm.size != size)
+   else if (entry->dsm.size != size)
        ereport(ERROR,
                (errmsg("requested DSM segment size does not match size of existing segment")));
    else
    {
-       NamedDSMState *state = &entry->data.dsm;
+       NamedDSMState *state = &entry->dsm;
        dsm_segment *seg;
 
        /* If the existing segment is not already attached, attach it now. */
@@ -294,7 +294,7 @@ GetNamedDSA(const char *name, bool *found)
    entry = dshash_find_or_insert(dsm_registry_table, name, found);
    if (!(*found))
    {
-       NamedDSAState *state = &entry->data.dsa;
+       NamedDSAState *state = &entry->dsa;
 
        entry->type = DSMR_ENTRY_TYPE_DSA;
 
@@ -314,7 +314,7 @@ GetNamedDSA(const char *name, bool *found)
                (errmsg("requested DSA does not match type of existing entry")));
    else
    {
-       NamedDSAState *state = &entry->data.dsa;
+       NamedDSAState *state = &entry->dsa;
 
        if (dsa_is_attached(state->handle))
            ereport(ERROR,
@@ -367,7 +367,7 @@ GetNamedDSHash(const char *name, const dshash_parameters *params, bool *found)
    entry = dshash_find_or_insert(dsm_registry_table, name, found);
    if (!(*found))
    {
-       NamedDSHState *dsh_state = &entry->data.dsh;
+       NamedDSHState *dsh_state = &entry->dsh;
        dshash_parameters params_copy;
        dsa_area   *dsa;
 
@@ -395,7 +395,7 @@ GetNamedDSHash(const char *name, const dshash_parameters *params, bool *found)
                (errmsg("requested DSHash does not match type of existing entry")));
    else
    {
-       NamedDSHState *dsh_state = &entry->data.dsh;
+       NamedDSHState *dsh_state = &entry->dsh;
        dsa_area   *dsa;
 
        /* XXX: Should we verify params matches what table was created with? */
@@ -447,7 +447,7 @@ pg_get_dsm_registry_allocations(PG_FUNCTION_ARGS)
         * attaching to them, return NULL for those.
         */
        if (entry->type == DSMR_ENTRY_TYPE_DSM)
-           vals[2] = Int64GetDatum(entry->data.dsm.size);
+           vals[2] = Int64GetDatum(entry->dsm.size);
        else
            nulls[2] = true;