From f575da0fedc920003afb4655f3503cc91949cc55 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 29 Dec 2019 09:09:20 +0100 Subject: [PATCH 1/4] Remove STATUS_FOUND Replace the solitary use with a bool. --- src/backend/storage/lmgr/lock.c | 24 +++++++++++------------- src/backend/storage/lmgr/proc.c | 12 ++++-------- src/include/c.h | 1 - src/include/storage/lock.h | 2 +- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 9089733ecc..e2c728a97d 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -746,7 +746,7 @@ LockAcquireExtended(const LOCKTAG *locktag, ResourceOwner owner; uint32 hashcode; LWLock *partitionLock; - int status; + bool found_conflict; bool log_lock = false; if (lockmethodid <= 0 || lockmethodid >= lengthof(LockMethods)) @@ -979,12 +979,12 @@ LockAcquireExtended(const LOCKTAG *locktag, * (That's last because most complex check.) */ if (lockMethodTable->conflictTab[lockmode] & lock->waitMask) - status = STATUS_FOUND; + found_conflict = true; else - status = LockCheckConflicts(lockMethodTable, lockmode, + found_conflict = LockCheckConflicts(lockMethodTable, lockmode, lock, proclock); - if (status == STATUS_OK) + if (!found_conflict) { /* No conflict with held or previously requested locks */ GrantLock(lock, proclock, lockmode); @@ -992,8 +992,6 @@ LockAcquireExtended(const LOCKTAG *locktag, } else { - Assert(status == STATUS_FOUND); - /* * We can't acquire the lock immediately. If caller specified no * blocking, remove useless table entries and return @@ -1330,7 +1328,7 @@ RemoveLocalLock(LOCALLOCK *locallock) * LockCheckConflicts -- test whether requested lock conflicts * with those already granted * - * Returns STATUS_FOUND if conflict, STATUS_OK if no conflict. + * Returns true if conflict, false if no conflict. * * NOTES: * Here's what makes this complicated: one process's locks don't @@ -1340,7 +1338,7 @@ RemoveLocalLock(LOCALLOCK *locallock) * the same group. So, we must subtract off these locks when determining * whether the requested new lock conflicts with those already held. */ -int +bool LockCheckConflicts(LockMethod lockMethodTable, LOCKMODE lockmode, LOCK *lock, @@ -1367,7 +1365,7 @@ LockCheckConflicts(LockMethod lockMethodTable, if (!(conflictMask & lock->grantMask)) { PROCLOCK_PRINT("LockCheckConflicts: no conflict", proclock); - return STATUS_OK; + return false; } /* @@ -1393,7 +1391,7 @@ LockCheckConflicts(LockMethod lockMethodTable, if (totalConflictsRemaining == 0) { PROCLOCK_PRINT("LockCheckConflicts: resolved (simple)", proclock); - return STATUS_OK; + return false; } /* If no group locking, it's definitely a conflict. */ @@ -1402,7 +1400,7 @@ LockCheckConflicts(LockMethod lockMethodTable, Assert(proclock->tag.myProc == MyProc); PROCLOCK_PRINT("LockCheckConflicts: conflicting (simple)", proclock); - return STATUS_FOUND; + return true; } /* @@ -1439,7 +1437,7 @@ LockCheckConflicts(LockMethod lockMethodTable, { PROCLOCK_PRINT("LockCheckConflicts: resolved (group)", proclock); - return STATUS_OK; + return false; } } otherproclock = (PROCLOCK *) @@ -1449,7 +1447,7 @@ LockCheckConflicts(LockMethod lockMethodTable, /* Nope, it's a real conflict. */ PROCLOCK_PRINT("LockCheckConflicts: conflicting (group)", proclock); - return STATUS_FOUND; + return true; } /* diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index fff0628e58..dbb541757f 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -1149,10 +1149,8 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable) } /* I must go before this waiter. Check special case. */ if ((lockMethodTable->conflictTab[lockmode] & aheadRequests) == 0 && - LockCheckConflicts(lockMethodTable, - lockmode, - lock, - proclock) == STATUS_OK) + !LockCheckConflicts(lockMethodTable, lockmode, lock, + proclock)) { /* Skip the wait and just grant myself the lock. */ GrantLock(lock, proclock, lockmode); @@ -1648,10 +1646,8 @@ ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock) * (b) doesn't conflict with already-held locks. */ if ((lockMethodTable->conflictTab[lockmode] & aheadRequests) == 0 && - LockCheckConflicts(lockMethodTable, - lockmode, - lock, - proc->waitProcLock) == STATUS_OK) + !LockCheckConflicts(lockMethodTable, lockmode, lock, + proc->waitProcLock)) { /* OK to waken */ GrantLock(lock, proc->waitProcLock, lockmode); diff --git a/src/include/c.h b/src/include/c.h index 00e41ac546..eddeb36ca1 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -1120,7 +1120,6 @@ typedef union PGAlignedXLogBlock #define STATUS_OK (0) #define STATUS_ERROR (-1) #define STATUS_EOF (-2) -#define STATUS_FOUND (1) #define STATUS_WAITING (2) /* diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h index e8b50fe094..7978fcf216 100644 --- a/src/include/storage/lock.h +++ b/src/include/storage/lock.h @@ -550,7 +550,7 @@ extern VirtualTransactionId *GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode, int *countp); extern void AtPrepare_Locks(void); extern void PostPrepare_Locks(TransactionId xid); -extern int LockCheckConflicts(LockMethod lockMethodTable, +extern bool LockCheckConflicts(LockMethod lockMethodTable, LOCKMODE lockmode, LOCK *lock, PROCLOCK *proclock); extern void GrantLock(LOCK *lock, PROCLOCK *proclock, LOCKMODE lockmode); -- 2.24.1