#define NODE_LOCK(l, t) RWLOCK((l), (t))
#define NODE_UNLOCK(l, t) RWUNLOCK((l), (t))
#define NODE_TRYUPGRADE(l) isc_rwlock_tryupgrade(l)
-
-#define NODE_STRONGLOCK(l) ((void)0)
-#define NODE_STRONGUNLOCK(l) ((void)0)
-#define NODE_WEAKLOCK(l, t) NODE_LOCK(l, t)
-#define NODE_WEAKUNLOCK(l, t) NODE_UNLOCK(l, t)
-#define NODE_WEAKDOWNGRADE(l) isc_rwlock_downgrade(l)
+#define NODE_DOWNGRADE(l) isc_rwlock_downgrade(l)
/*%
* Whether to rate-limit updating the LRU to avoid possible thread contention.
POST(locktype);
- NODE_STRONGLOCK(nodelock);
- NODE_WEAKLOCK(nodelock, locktype);
+ NODE_LOCK(nodelock, locktype);
/*
* Check if we can possibly cleanup the dead node. If so, upgrade
/*
* Upgrade the lock and test if we still need to unlink.
*/
- NODE_WEAKUNLOCK(nodelock, locktype);
+ NODE_UNLOCK(nodelock, locktype);
locktype = isc_rwlocktype_write;
POST(locktype);
- NODE_WEAKLOCK(nodelock, locktype);
+ NODE_LOCK(nodelock, locktype);
if (ISC_LINK_LINKED(node, deadlink))
ISC_LIST_UNLINK(rbtdb->deadnodes[node->locknum],
node, deadlink);
new_reference(rbtdb, node);
- NODE_WEAKUNLOCK(nodelock, locktype);
- NODE_STRONGUNLOCK(nodelock);
+ NODE_UNLOCK(nodelock, locktype);
}
/*
/* Upgrade the lock? */
if (nlock == isc_rwlocktype_read) {
- NODE_WEAKUNLOCK(&nodelock->lock, isc_rwlocktype_read);
- NODE_WEAKLOCK(&nodelock->lock, isc_rwlocktype_write);
+ NODE_UNLOCK(&nodelock->lock, isc_rwlocktype_read);
+ NODE_LOCK(&nodelock->lock, isc_rwlocktype_write);
}
if (isc_refcount_decrement(&node->references) > 1) {
/* Restore the lock? */
if (nlock == isc_rwlocktype_read)
- NODE_WEAKDOWNGRADE(&nodelock->lock);
+ NODE_DOWNGRADE(&nodelock->lock);
return (false);
}
restore_locks:
/* Restore the lock? */
if (nlock == isc_rwlocktype_read)
- NODE_WEAKDOWNGRADE(&nodelock->lock);
+ NODE_DOWNGRADE(&nodelock->lock);
/*
* Relock a read lock, or unlock the write lock if no lock was held.
iterator->common.version = (dns_dbversion_t *)rbtversion;
iterator->common.now = now;
- NODE_STRONGLOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
-
isc_refcount_increment(&rbtnode->references);
iterator->current = NULL;
- NODE_STRONGUNLOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
-
*iteratorp = (dns_rdatasetiter_t *)iterator;
return (ISC_R_SUCCESS);
/* Note that the access to origin_node doesn't require a DB lock */
onode = (dns_rbtnode_t *)rbtdb->origin_node;
if (onode != NULL) {
- NODE_STRONGLOCK(&rbtdb->node_locks[onode->locknum].lock);
new_reference(rbtdb, onode);
- NODE_STRONGUNLOCK(&rbtdb->node_locks[onode->locknum].lock);
*nodep = rbtdb->origin_node;
} else {
} else
result = ISC_R_SUCCESS;
- NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
new_reference(rbtdb, node);
- NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
*nodep = rbtdbiter->node;