From 15916ffb0468d0b1036ba661767fe6e1b5fb3ee8 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Fri, 8 Dec 2023 09:46:59 +0200 Subject: [PATCH] Initialize ShmemVariableCache like other shmem areas For sake of consistency. Reviewed-by: Tristan Partin, Richard Guo Discussion: https://www.postgresql.org/message-id/6537d63d-4bb5-46f8-9b5d-73a8ba4720ab@iki.fi --- src/backend/access/transam/varsup.c | 27 +++++++++++++++++++++++++++ src/backend/postmaster/postmaster.c | 4 ---- src/backend/storage/ipc/ipci.c | 3 +++ src/backend/storage/ipc/shmem.c | 8 -------- src/include/access/transam.h | 2 ++ 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index abfee483174..302f9296240 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -34,6 +34,33 @@ VariableCache ShmemVariableCache = NULL; +/* + * Initialization of shared memory for ShmemVariableCache. + */ +Size +VarsupShmemSize(void) +{ + return sizeof(VariableCacheData); +} + +void +VarsupShmemInit(void) +{ + bool found; + + /* Initialize our shared state struct */ + ShmemVariableCache = ShmemInitStruct("ShmemVariableCache", + sizeof(VariableCacheData), + &found); + if (!IsUnderPostmaster) + { + Assert(!found); + memset(ShmemVariableCache, 0, sizeof(VariableCacheData)); + } + else + Assert(found); +} + /* * Allocate the next FullTransactionId for a new transaction or * subtransaction. diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index ae31d66930d..023a772c496 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -89,7 +89,6 @@ #include #endif -#include "access/transam.h" #include "access/xlog.h" #include "access/xlogrecovery.h" #include "catalog/pg_control.h" @@ -513,7 +512,6 @@ typedef struct #endif void *UsedShmemSegAddr; slock_t *ShmemLock; - VariableCache ShmemVariableCache; Backend *ShmemBackendArray; #ifndef HAVE_SPINLOCKS PGSemaphore *SpinlockSemaArray; @@ -6034,7 +6032,6 @@ save_backend_variables(BackendParameters *param, Port *port, BackgroundWorker *w param->UsedShmemSegAddr = UsedShmemSegAddr; param->ShmemLock = ShmemLock; - param->ShmemVariableCache = ShmemVariableCache; param->ShmemBackendArray = ShmemBackendArray; #ifndef HAVE_SPINLOCKS @@ -6280,7 +6277,6 @@ restore_backend_variables(BackendParameters *param, Port **port, BackgroundWorke UsedShmemSegAddr = param->UsedShmemSegAddr; ShmemLock = param->ShmemLock; - ShmemVariableCache = param->ShmemVariableCache; ShmemBackendArray = param->ShmemBackendArray; #ifndef HAVE_SPINLOCKS diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c index 2225a4a6e60..0e0ac22bdd6 100644 --- a/src/backend/storage/ipc/ipci.c +++ b/src/backend/storage/ipc/ipci.c @@ -21,6 +21,7 @@ #include "access/nbtree.h" #include "access/subtrans.h" #include "access/syncscan.h" +#include "access/transam.h" #include "access/twophase.h" #include "access/xlogprefetcher.h" #include "access/xlogrecovery.h" @@ -118,6 +119,7 @@ CalculateShmemSize(int *num_semaphores) size = add_size(size, PredicateLockShmemSize()); size = add_size(size, ProcGlobalShmemSize()); size = add_size(size, XLogPrefetchShmemSize()); + size = add_size(size, VarsupShmemSize()); size = add_size(size, XLOGShmemSize()); size = add_size(size, XLogRecoveryShmemSize()); size = add_size(size, CLOGShmemSize()); @@ -289,6 +291,7 @@ CreateOrAttachShmemStructs(void) /* * Set up xlog, clog, and buffers */ + VarsupShmemInit(); XLOGShmemInit(); XLogPrefetchShmemInit(); XLogRecoveryShmemInit(); diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c index 5465fa19646..52818fd1bd6 100644 --- a/src/backend/storage/ipc/shmem.c +++ b/src/backend/storage/ipc/shmem.c @@ -140,14 +140,6 @@ InitShmemAllocation(void) /* ShmemIndex can't be set up yet (need LWLocks first) */ shmhdr->index = NULL; ShmemIndex = (HTAB *) NULL; - - /* - * Initialize ShmemVariableCache for transaction manager. (This doesn't - * really belong here, but not worth moving.) - */ - ShmemVariableCache = (VariableCache) - ShmemAlloc(sizeof(*ShmemVariableCache)); - memset(ShmemVariableCache, 0, sizeof(*ShmemVariableCache)); } /* diff --git a/src/include/access/transam.h b/src/include/access/transam.h index f5af6d30556..a4654f6c31b 100644 --- a/src/include/access/transam.h +++ b/src/include/access/transam.h @@ -285,6 +285,8 @@ extern TransactionId TransactionIdLatest(TransactionId mainxid, extern XLogRecPtr TransactionIdGetCommitLSN(TransactionId xid); /* in transam/varsup.c */ +extern Size VarsupShmemSize(void); +extern void VarsupShmemInit(void); extern FullTransactionId GetNewTransactionId(bool isSubXact); extern void AdvanceNextFullTransactionIdPastXid(TransactionId xid); extern FullTransactionId ReadNextFullTransactionId(void);