diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index 62d58da4abc..85018482798 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -1818,14 +1818,19 @@ MultiXactShmemRequest(void *arg)
 	 */
 }
 
-static void
-MultiXactShmemInit(void *arg)
+static void MultiXactSetupPointers(void)
 {
 	/*
 	 * Set up array pointers.
 	 */
 	OldestMemberMXactId = MultiXactState->perBackendXactIds;
 	OldestVisibleMXactId = OldestMemberMXactId + NumMemberSlots;
+}
+
+static void
+MultiXactShmemInit(void *arg)
+{
+	MultiXactSetupPointers();
 
 	SlruPagePrecedesUnitTests(MultiXactOffsetCtl, MULTIXACT_OFFSETS_PER_PAGE);
 }
@@ -1833,11 +1838,7 @@ MultiXactShmemInit(void *arg)
 static void
 MultiXactShmemAttach(void *arg)
 {
-	/*
-	 * Set up array pointers.
-	 */
-	OldestMemberMXactId = MultiXactState->perBackendXactIds;
-	OldestVisibleMXactId = OldestMemberMXactId + NumMemberSlots;
+	MultiXactSetupPointers();
 }
 
 /*
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index 9c389b23506..28f963ee035 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -1246,6 +1246,17 @@ PredicateLockShmemRequest(void *arg)
 		);
 }
 
+static void
+PredicateLockSetGlobals(void)
+{
+	/* This never changes, so let's keep a local copy. */
+	OldCommittedSxact = PredXact->OldCommittedSxact;
+
+	/* Pre-calculate the hash and partition lock of the scratch entry */
+	ScratchTargetTagHash = PredicateLockTargetTagHashCode(&ScratchTargetTag);
+	ScratchPartitionLock = PredicateLockHashPartitionLock(ScratchTargetTagHash);
+}
+
 static void
 PredicateLockShmemInit(void *arg)
 {
@@ -1323,12 +1334,7 @@ PredicateLockShmemInit(void *arg)
 	serialControl->tailXid = InvalidTransactionId;
 	LWLockRelease(SerialControlLock);
 
-	/* This never changes, so let's keep a local copy. */
-	OldCommittedSxact = PredXact->OldCommittedSxact;
-
-	/* Pre-calculate the hash and partition lock of the scratch entry */
-	ScratchTargetTagHash = PredicateLockTargetTagHashCode(&ScratchTargetTag);
-	ScratchPartitionLock = PredicateLockHashPartitionLock(ScratchTargetTagHash);
+	PredicateLockSetGlobals();
 
 	SlruPagePrecedesUnitTests(SerialSlruCtl, SERIAL_ENTRIESPERPAGE);
 }
@@ -1336,12 +1342,7 @@ PredicateLockShmemInit(void *arg)
 static void
 PredicateLockShmemAttach(void *arg)
 {
-	/* This never changes, so let's keep a local copy. */
-	OldCommittedSxact = PredXact->OldCommittedSxact;
-
-	/* Pre-calculate the hash and partition lock of the scratch entry */
-	ScratchTargetTagHash = PredicateLockTargetTagHashCode(&ScratchTargetTag);
-	ScratchPartitionLock = PredicateLockHashPartitionLock(ScratchTargetTagHash);
+	PredicateLockSetGlobals();
 }
 
 /*
