diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 5f2239f..55e2fea 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -729,8 +729,12 @@ LockAcquireExtended(const LOCKTAG *locktag, localtag.lock = *locktag; localtag.mode = lockmode; - locallock = (LOCALLOCK *) hash_search(LockMethodLocalHash, - (void *) &localtag, + /* + * Calculate hash value once and then pass around as needed + */ + hashcode = LockTagHashCode(&(localtag.lock)); + locallock = (LOCALLOCK *) hash_search_with_hash_value(LockMethodLocalHash, + (void *) &localtag, hashcode, HASH_ENTER, &found); /* @@ -740,7 +744,7 @@ LockAcquireExtended(const LOCKTAG *locktag, { locallock->lock = NULL; locallock->proclock = NULL; - locallock->hashcode = LockTagHashCode(&(localtag.lock)); + locallock->hashcode = hashcode; locallock->nLocks = 0; locallock->numLockOwners = 0; locallock->maxLockOwners = 8; @@ -763,7 +767,6 @@ LockAcquireExtended(const LOCKTAG *locktag, locallock->maxLockOwners = newsize; } } - hashcode = locallock->hashcode; /* * If we already hold the lock, we can just increase the count locally.