diff options
Diffstat (limited to 'src/backend/storage/ipc/procarray.c')
-rw-r--r-- | src/backend/storage/ipc/procarray.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 9d3efb7d80e..13d192ec2b4 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -97,7 +97,7 @@ typedef struct ProcArrayStruct /* oldest catalog xmin of any replication slot */ TransactionId replication_slot_catalog_xmin; - /* indexes into allProcs[], has PROCARRAY_MAXPROCS entries */ + /* indexes into allProcs[], has ProcArrayMaxProcs entries */ int pgprocnos[FLEXIBLE_ARRAY_MEMBER]; } ProcArrayStruct; @@ -355,6 +355,17 @@ static void MaintainLatestCompletedXidRecovery(TransactionId latestXid); static inline FullTransactionId FullXidRelativeTo(FullTransactionId rel, TransactionId xid); static void GlobalVisUpdateApply(ComputeXidHorizonsResult *horizons); +static inline int GetProcArrayMaxProcs(void); + + +/* + * Retrieve the number of slots in the ProcArray structure. + */ +static inline int +GetProcArrayMaxProcs(void) +{ + return GetMaxBackends() + max_prepared_xacts; +} /* * Report shared-memory space needed by CreateSharedProcArray. @@ -365,10 +376,8 @@ ProcArrayShmemSize(void) Size size; /* Size of the ProcArray structure itself */ -#define PROCARRAY_MAXPROCS (MaxBackends + max_prepared_xacts) - size = offsetof(ProcArrayStruct, pgprocnos); - size = add_size(size, mul_size(sizeof(int), PROCARRAY_MAXPROCS)); + size = add_size(size, mul_size(sizeof(int), GetProcArrayMaxProcs())); /* * During Hot Standby processing we have a data structure called @@ -384,7 +393,7 @@ ProcArrayShmemSize(void) * shared memory is being set up. */ #define TOTAL_MAX_CACHED_SUBXIDS \ - ((PGPROC_MAX_CACHED_SUBXIDS + 1) * PROCARRAY_MAXPROCS) + ((PGPROC_MAX_CACHED_SUBXIDS + 1) * GetProcArrayMaxProcs()) if (EnableHotStandby) { @@ -411,7 +420,7 @@ CreateSharedProcArray(void) ShmemInitStruct("Proc Array", add_size(offsetof(ProcArrayStruct, pgprocnos), mul_size(sizeof(int), - PROCARRAY_MAXPROCS)), + GetProcArrayMaxProcs())), &found); if (!found) @@ -420,7 +429,7 @@ CreateSharedProcArray(void) * We're the first - initialize. */ procArray->numProcs = 0; - procArray->maxProcs = PROCARRAY_MAXPROCS; + procArray->maxProcs = GetProcArrayMaxProcs(); procArray->maxKnownAssignedXids = TOTAL_MAX_CACHED_SUBXIDS; procArray->numKnownAssignedXids = 0; procArray->tailKnownAssignedXids = 0; @@ -4623,7 +4632,7 @@ KnownAssignedXidsCompress(bool force) */ int nelements = head - tail; - if (nelements < 4 * PROCARRAY_MAXPROCS || + if (nelements < 4 * GetProcArrayMaxProcs() || nelements < 2 * pArray->numKnownAssignedXids) return; } |