Initialize ShmemVariableCache like other shmem areas
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 8 Dec 2023 07:46:59 +0000 (09:46 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 8 Dec 2023 07:46:59 +0000 (09:46 +0200)
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
src/backend/postmaster/postmaster.c
src/backend/storage/ipc/ipci.c
src/backend/storage/ipc/shmem.c
src/include/access/transam.h

index abfee48317493ba9fe517d4a7ae30b3ef912a875..302f9296240889fc8ccfa4680901905e4920a044 100644 (file)
 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.
index ae31d66930d9d4178b7114dbae2b1dd69766720e..023a772c4963b733072b834947f99a07eec1766f 100644 (file)
@@ -89,7 +89,6 @@
 #include <pthread.h>
 #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
index 2225a4a6e6049d090041c95f7b0b7ea1da7b7b7c..0e0ac22bdd675bbc8514cb025383145529876a5c 100644 (file)
@@ -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();
index 5465fa19646a89bf4a278e71643b4e78317be984..52818fd1bd6427e9e052e5e0c3adf90c537c0d2e 100644 (file)
@@ -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));
 }
 
 /*
index f5af6d3055678fdc4f376b66257f902184c18d27..a4654f6c31b9d1e25af7d1ae6796643ea4cfc7ab 100644 (file)
@@ -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);