diff options
Diffstat (limited to 'src/backend/access')
-rw-r--r-- | src/backend/access/nbtree/nbtutils.c | 4 | ||||
-rw-r--r-- | src/backend/access/transam/multixact.c | 31 | ||||
-rw-r--r-- | src/backend/access/transam/twophase.c | 3 |
3 files changed, 26 insertions, 12 deletions
diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index 6a651d8397..84164748b3 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -2072,7 +2072,7 @@ BTreeShmemSize(void) Size size; size = offsetof(BTVacInfo, vacuums); - size = add_size(size, mul_size(MaxBackends, sizeof(BTOneVacInfo))); + size = add_size(size, mul_size(GetMaxBackends(), sizeof(BTOneVacInfo))); return size; } @@ -2101,7 +2101,7 @@ BTreeShmemInit(void) btvacinfo->cycle_ctr = (BTCycleId) time(NULL); btvacinfo->num_vacuums = 0; - btvacinfo->max_vacuums = MaxBackends; + btvacinfo->max_vacuums = GetMaxBackends(); } else Assert(found); diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 806f2e43ba..f00c272521 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -282,12 +282,11 @@ typedef struct MultiXactStateData } MultiXactStateData; /* - * Last element of OldestMemberMXactId and OldestVisibleMXactId arrays. - * Valid elements are (1..MaxOldestSlot); element 0 is never used. + * Pointers to the state data in shared memory + * + * The index of the last element of the OldestMemberMXactId and + * OldestVisibleMXacId arrays can be obtained with GetMaxOldestSlot(). */ -#define MaxOldestSlot (MaxBackends + max_prepared_xacts) - -/* Pointers to the state data in shared memory */ static MultiXactStateData *MultiXactState; static MultiXactId *OldestMemberMXactId; static MultiXactId *OldestVisibleMXactId; @@ -342,6 +341,7 @@ static void MultiXactIdSetOldestVisible(void); static void RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, int nmembers, MultiXactMember *members); static MultiXactId GetNewMultiXactId(int nmembers, MultiXactOffset *offset); +static inline int GetMaxOldestSlot(void); /* MultiXact cache management */ static int mxactMemberComparator(const void *arg1, const void *arg2); @@ -663,6 +663,17 @@ MultiXactIdSetOldestMember(void) } /* + * Retrieve the index of the last element of the OldestMemberMXactId and + * OldestVisibleMXactId arrays. Valid elements are (1..MaxOldestSlot); element + * 0 is never used. + */ +static inline int +GetMaxOldestSlot(void) +{ + return GetMaxBackends() + max_prepared_xacts; +} + +/* * MultiXactIdSetOldestVisible * Save the oldest MultiXactId this transaction considers possibly live. * @@ -684,6 +695,7 @@ MultiXactIdSetOldestVisible(void) if (!MultiXactIdIsValid(OldestVisibleMXactId[MyBackendId])) { MultiXactId oldestMXact; + int maxOldestSlot = GetMaxOldestSlot(); int i; LWLockAcquire(MultiXactGenLock, LW_EXCLUSIVE); @@ -697,7 +709,7 @@ MultiXactIdSetOldestVisible(void) if (oldestMXact < FirstMultiXactId) oldestMXact = FirstMultiXactId; - for (i = 1; i <= MaxOldestSlot; i++) + for (i = 1; i <= maxOldestSlot; i++) { MultiXactId thisoldest = OldestMemberMXactId[i]; @@ -1831,7 +1843,7 @@ MultiXactShmemSize(void) /* We need 2*MaxOldestSlot + 1 perBackendXactIds[] entries */ #define SHARED_MULTIXACT_STATE_SIZE \ add_size(offsetof(MultiXactStateData, perBackendXactIds) + sizeof(MultiXactId), \ - mul_size(sizeof(MultiXactId) * 2, MaxOldestSlot)) + mul_size(sizeof(MultiXactId) * 2, GetMaxOldestSlot())) size = SHARED_MULTIXACT_STATE_SIZE; size = add_size(size, SimpleLruShmemSize(NUM_MULTIXACTOFFSET_BUFFERS, 0)); @@ -1882,7 +1894,7 @@ MultiXactShmemInit(void) * since we only use indexes 1..MaxOldestSlot in each array. */ OldestMemberMXactId = MultiXactState->perBackendXactIds; - OldestVisibleMXactId = OldestMemberMXactId + MaxOldestSlot; + OldestVisibleMXactId = OldestMemberMXactId + GetMaxOldestSlot(); } /* @@ -2507,6 +2519,7 @@ GetOldestMultiXactId(void) { MultiXactId oldestMXact; MultiXactId nextMXact; + int maxOldestSlot = GetMaxOldestSlot(); int i; /* @@ -2525,7 +2538,7 @@ GetOldestMultiXactId(void) nextMXact = FirstMultiXactId; oldestMXact = nextMXact; - for (i = 1; i <= MaxOldestSlot; i++) + for (i = 1; i <= maxOldestSlot; i++) { MultiXactId thisoldest; diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 271a3146db..608c5149e5 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -260,6 +260,7 @@ TwoPhaseShmemInit(void) { GlobalTransaction gxacts; int i; + int max_backends = GetMaxBackends(); Assert(!found); TwoPhaseState->freeGXacts = NULL; @@ -293,7 +294,7 @@ TwoPhaseShmemInit(void) * prepared transaction. Currently multixact.c uses that * technique. */ - gxacts[i].dummyBackendId = MaxBackends + 1 + i; + gxacts[i].dummyBackendId = max_backends + 1 + i; } } else |