hash_once.v1.patch
application/octet-stream
Patch
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/storage/lmgr/lock.c | 7 | 4 |
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.