On Tue, Jan 24, 2023 at 01:13:55PM -0500, Tom Lane wrote: > Either that comment needs to be rewritten or we need to invent some > more macros.
Here is a first attempt at a patch. I scanned through all the existing uses of InvalidDsaPointer and DSM_HANDLE_INVALID and didn't notice anything else that needed adjusting. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 564bffe5ca..970d170e73 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -922,8 +922,8 @@ ApplyLauncherShmemInit(void) memset(LogicalRepCtx, 0, ApplyLauncherShmemSize()); - LogicalRepCtx->last_start_dsa = DSM_HANDLE_INVALID; - LogicalRepCtx->last_start_dsh = DSM_HANDLE_INVALID; + LogicalRepCtx->last_start_dsa = DSA_HANDLE_INVALID; + LogicalRepCtx->last_start_dsh = DSHASH_HANDLE_INVALID; /* Initialize memory and spin locks for each worker slot. */ for (slot = 0; slot < max_logical_replication_workers; slot++) @@ -947,7 +947,7 @@ logicalrep_launcher_attach_dshmem(void) MemoryContext oldcontext; /* Quick exit if we already did this. */ - if (LogicalRepCtx->last_start_dsh != DSM_HANDLE_INVALID && + if (LogicalRepCtx->last_start_dsh != DSHASH_HANDLE_INVALID && last_start_times != NULL) return; @@ -957,7 +957,7 @@ logicalrep_launcher_attach_dshmem(void) /* Be sure any local memory allocated by DSA routines is persistent. */ oldcontext = MemoryContextSwitchTo(TopMemoryContext); - if (LogicalRepCtx->last_start_dsh == DSM_HANDLE_INVALID) + if (LogicalRepCtx->last_start_dsh == DSHASH_HANDLE_INVALID) { /* Initialize dynamic shared hash table for last-start times. */ last_start_times_dsa = dsa_create(LWTRANCHE_LAUNCHER_DSA); diff --git a/src/include/lib/dshash.h b/src/include/lib/dshash.h index 152927742e..c284c8489c 100644 --- a/src/include/lib/dshash.h +++ b/src/include/lib/dshash.h @@ -23,6 +23,9 @@ typedef struct dshash_table dshash_table; /* A handle for a dshash_table which can be shared with other processes. */ typedef dsa_pointer dshash_table_handle; +/* Special value for an unitinitialized dshash_table_handle */ +#define DSHASH_HANDLE_INVALID ((dshash_table_handle) InvalidDsaPointer) + /* The type for hash values. */ typedef uint32 dshash_hash; diff --git a/src/include/utils/dsa.h b/src/include/utils/dsa.h index 104386e674..ee59a76447 100644 --- a/src/include/utils/dsa.h +++ b/src/include/utils/dsa.h @@ -99,6 +99,9 @@ typedef pg_atomic_uint64 dsa_pointer_atomic; */ typedef dsm_handle dsa_handle; +/* Special value for an unitinitialized dsa_handle */ +#define DSA_HANDLE_INVALID ((dsa_handle) DSM_HANDLE_INVALID) + extern dsa_area *dsa_create(int tranche_id); extern dsa_area *dsa_create_in_place(void *place, size_t size, int tranche_id, dsm_segment *segment);