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.
