*dbp = NULL;
if (isc_refcount_decrement(&rbtdb->references) == 1) {
- (void)isc_refcount_current(&rbtdb->references);
maybe_free_rbtdb(rbtdb);
}
}
REQUIRE(VALID_RBTDB(rbtdb));
- /* XXXOND: Is the lock needed here? */
RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
version = rbtdb->current_version;
isc_refcount_increment(&version->references);
* Update the zone's secure status. If version is non-NULL
* this is deferred until closeversion() is called.
*/
- if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
+ if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) {
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
iszonesecure(db, rbtdb->current_version, rbtdb->origin_node);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ }
return (result);
}
* Update the zone's secure status. If version is non-NULL
* this is deferred until closeversion() is called.
*/
- if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb))
+ if (result == ISC_R_SUCCESS && version == NULL && !IS_CACHE(rbtdb)) {
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
iszonesecure(db, rbtdb->current_version, rbtdb->origin_node);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
+ }
return (result);
}
rbtdb->attributes &= ~RBTDB_ATTR_LOADING;
rbtdb->attributes |= RBTDB_ATTR_LOADED;
- RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
-
/*
* If there's a KEY rdataset at the zone origin containing a
* zone key, we consider the zone secure.
*/
- if (! IS_CACHE(rbtdb) && rbtdb->origin_node != NULL)
+ if (! IS_CACHE(rbtdb) && rbtdb->origin_node != NULL) {
iszonesecure(db, rbtdb->current_version, rbtdb->origin_node);
+ }
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
callbacks->add = NULL;
callbacks->add_private = NULL;
REQUIRE(VALID_RBTDB(rbtdb));
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
secure = (rbtdb->current_version->secure == dns_db_secure);
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
return (secure);
}
REQUIRE(VALID_RBTDB(rbtdb));
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
dnssec = (rbtdb->current_version->secure != dns_db_insecure);
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
return (dnssec);
}
REQUIRE(VALID_RBTDB(rbtdb));
INSIST(rbtversion == NULL || rbtversion->rbtdb == rbtdb);
- RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
-
- if (rbtversion == NULL)
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
+ if (rbtversion == NULL) {
rbtversion = rbtdb->current_version;
+ }
if (rbtversion->havensec3) {
if (hash != NULL)
*flags = rbtversion->flags;
result = ISC_R_SUCCESS;
}
- RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
return (result);
}
REQUIRE(VALID_RBTDB(rbtdb));
INSIST(rbtversion == NULL || rbtversion->rbtdb == rbtdb);
- if (rbtversion == NULL)
+ RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_read);
+ if (rbtversion == NULL) {
rbtversion = rbtdb->current_version;
+ }
RWLOCK(&rbtversion->rwlock, isc_rwlocktype_read);
- if (records != NULL)
+ if (records != NULL) {
*records = rbtversion->records;
+ }
- if (bytes != NULL)
+ if (bytes != NULL) {
*bytes = rbtversion->bytes;
+ }
RWUNLOCK(&rbtversion->rwlock, isc_rwlocktype_read);
+ RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_read);
return (result);
}