On Tue, Feb 08, 2022 at 10:57:37PM -0500, Robert Haas wrote: > Well I didn't do anything myself except review and commit Nathan's > patch, so I suppose you mean he could have done that, but fair enough. > I don't mind if you want to change it around.
Okay, I'd rather apply the same rule everywhere for consistency, then, like in the attached. That's minimal, still. -- Michael
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index d44001a49f..455d895a44 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -1633,6 +1633,7 @@ SignalBackends(void) int32 *pids; BackendId *ids; int count; + int max_backends = GetMaxBackends(); /* * Identify backends that we need to signal. We don't want to send @@ -1642,8 +1643,8 @@ SignalBackends(void) * XXX in principle these pallocs could fail, which would be bad. Maybe * preallocate the arrays? They're not that large, though. */ - pids = (int32 *) palloc(GetMaxBackends() * sizeof(int32)); - ids = (BackendId *) palloc(GetMaxBackends() * sizeof(BackendId)); + pids = (int32 *) palloc(max_backends * sizeof(int32)); + ids = (BackendId *) palloc(max_backends * sizeof(BackendId)); count = 0; LWLockAcquire(NotifyQueueLock, LW_EXCLUSIVE); diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 1528d788d0..ee2e15c17e 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -2924,6 +2924,7 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode, int *countp) LWLock *partitionLock; int count = 0; int fast_count = 0; + int max_backends = GetMaxBackends(); if (lockmethodid <= 0 || lockmethodid >= lengthof(LockMethods)) elog(ERROR, "unrecognized lock method: %d", lockmethodid); @@ -2942,12 +2943,12 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode, int *countp) vxids = (VirtualTransactionId *) MemoryContextAlloc(TopMemoryContext, sizeof(VirtualTransactionId) * - (GetMaxBackends() + max_prepared_xacts + 1)); + (max_backends + max_prepared_xacts + 1)); } else vxids = (VirtualTransactionId *) palloc0(sizeof(VirtualTransactionId) * - (GetMaxBackends() + max_prepared_xacts + 1)); + (max_backends + max_prepared_xacts + 1)); /* Compute hash code and partition lock, and look up conflicting modes. */ hashcode = LockTagHashCode(locktag); @@ -3104,7 +3105,7 @@ GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode, int *countp) LWLockRelease(partitionLock); - if (count > GetMaxBackends() + max_prepared_xacts) /* should never happen */ + if (count > max_backends + max_prepared_xacts) /* should never happen */ elog(PANIC, "too many conflicting locks found"); vxids[count].backendId = InvalidBackendId; diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c index 4e517b28e1..944cd6df03 100644 --- a/src/backend/utils/adt/lockfuncs.c +++ b/src/backend/utils/adt/lockfuncs.c @@ -559,13 +559,14 @@ pg_safe_snapshot_blocking_pids(PG_FUNCTION_ARGS) int *blockers; int num_blockers; Datum *blocker_datums; + int max_backends = GetMaxBackends(); /* A buffer big enough for any possible blocker list without truncation */ - blockers = (int *) palloc(GetMaxBackends() * sizeof(int)); + blockers = (int *) palloc(max_backends * sizeof(int)); /* Collect a snapshot of processes waited for by GetSafeSnapshot */ num_blockers = - GetSafeSnapshotBlockingPids(blocked_pid, blockers, GetMaxBackends()); + GetSafeSnapshotBlockingPids(blocked_pid, blockers, max_backends); /* Convert int array to Datum array */ if (num_blockers > 0)
signature.asc
Description: PGP signature