From a44bd6a6edccd4c8e3884a13fcff037e7e2dd868 Mon Sep 17 00:00:00 2001 From: Michael Graff Date: Fri, 10 Dec 1999 23:22:13 +0000 Subject: [PATCH] Unlock the right bucket in the race condition avoidance case --- lib/dns/adb.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/dns/adb.c b/lib/dns/adb.c index 547abf74b0..80eefae1d2 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -2618,6 +2618,7 @@ dns_adb_cancelfind(dns_adbfind_t *find) isc_task_t *task; dns_adb_t *adb; int bucket; + int unlock_bucket; LOCK(&find->lock); @@ -2636,14 +2637,15 @@ dns_adb_cancelfind(dns_adbfind_t *find) /* * We need to get the adbname's lock to unlink the find. */ - violate_locking_hierarchy(&find->lock, &adb->namelocks[bucket]); + unlock_bucket = bucket; + violate_locking_hierarchy(&find->lock, &adb->namelocks[unlock_bucket]); bucket = find->name_bucket; if (bucket != DNS_ADB_INVALIDBUCKET) { ISC_LIST_UNLINK(find->adbname->finds, find, plink); find->adbname = NULL; find->name_bucket = DNS_ADB_INVALIDBUCKET; } - UNLOCK(&adb->namelocks[bucket]); + UNLOCK(&adb->namelocks[unlock_bucket]); bucket = DNS_ADB_INVALIDBUCKET; cleanup: