diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index d930c66c..ff9b9caa 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -743,6 +743,20 @@ LockHasWaiters(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock) */ partitionLock = LockHashPartitionLock(locallock->hashcode); + /* + * If the lock was acquired via the fast path, locallock->lock and + * locallock->proclock will be NULL. We must transfer the lock to the + * main lock table before we can inspect LOCK->waitMask. + */ + if (locallock->lock == NULL) + { + PROCLOCK *fp_proclock; + + fp_proclock = FastPathGetRelationLockEntry(locallock); + locallock->lock = fp_proclock->tag.myLock; + locallock->proclock = fp_proclock; + } + LWLockAcquire(partitionLock, LW_SHARED); /*