diff --git a/src/backend/storage/ipc/dsm_registry.c b/src/backend/storage/ipc/dsm_registry.c index ea80f45716..0343ce987f 100644 --- a/src/backend/storage/ipc/dsm_registry.c +++ b/src/backend/storage/ipc/dsm_registry.c @@ -45,8 +45,8 @@ static const dshash_parameters dsh_params = { LWTRANCHE_DSM_REGISTRY_HASH }; -static dsa_area *dsm_registry_dsa; -static dshash_table *dsm_registry_table; +static dsa_area *dsm_registry_dsa = NULL; +static dshash_table *dsm_registry_table = NULL; static void init_dsm_registry(void); @@ -83,13 +83,20 @@ init_dsm_registry(void) { /* Quick exit if we already did this. */ if (dsm_registry_table) + { + Assert(dsm_registry_dsa != NULL); return; + } + + Assert(dsm_registry_dsa == NULL); /* Otherwise, use a lock to ensure only one process creates the table. */ LWLockAcquire(DSMRegistryLock, LW_EXCLUSIVE); if (DSMRegistryCtx->dshh == DSHASH_HANDLE_INVALID) { + Assert(DSMRegistryCtx->dsah == DSHASH_HANDLE_INVALID); + /* Initialize dynamic shared hash table for registry. */ dsm_registry_dsa = dsa_create(LWTRANCHE_DSM_REGISTRY_DSA); dsa_pin(dsm_registry_dsa); @@ -102,6 +109,8 @@ init_dsm_registry(void) } else { + Assert(DSMRegistryCtx->dsah != DSHASH_HANDLE_INVALID); + /* Attach to existing dynamic shared hash table. */ dsm_registry_dsa = dsa_attach(DSMRegistryCtx->dsah); dsa_pin_mapping(dsm_registry_dsa); diff --git a/src/include/storage/lwlock.h b/src/include/storage/lwlock.h index 665d471418..e0e7b3b765 100644 --- a/src/include/storage/lwlock.h +++ b/src/include/storage/lwlock.h @@ -209,7 +209,7 @@ typedef enum BuiltinTrancheIds LWTRANCHE_LAUNCHER_HASH, LWTRANCHE_DSM_REGISTRY_DSA, LWTRANCHE_DSM_REGISTRY_HASH, - LWTRANCHE_FIRST_USER_DEFINED + LWTRANCHE_FIRST_USER_DEFINED, } BuiltinTrancheIds; /*