if (val == NULL)
return (ISC_R_NOMEMORY);
val->view = NULL;
- dns_view_attach(view, &val->view);
+ dns_view_weakattach(view, &val->view);
event = (dns_validatorevent_t *)
isc_event_allocate(view->mctx, task,
isc_event_free(ISC_EVENT_PTR(&event));
cleanup_val:
- dns_view_detach(&val->view);
+ dns_view_weakdetach(&val->view);
isc_mem_put(view->mctx, val, sizeof(*val));
return (result);
if (val->siginfo != NULL)
isc_mem_put(mctx, val->siginfo, sizeof(*val->siginfo));
DESTROYLOCK(&val->lock);
- dns_view_detach(&val->view);
+ dns_view_weakdetach(&val->view);
val->magic = 0;
isc_mem_put(mctx, val, sizeof(*val));
}
void
dns_view_dialup(dns_view_t *view) {
REQUIRE(DNS_VIEW_VALID(view));
- if (view->zonetable != NULL)
- (void)dns_zt_apply(view->zonetable, ISC_FALSE, dialup, NULL);
+ REQUIRE(view->zonetable != NULL);
+
+ (void)dns_zt_apply(view->zonetable, ISC_FALSE, dialup, NULL);
}
void
REQUIRE(DNS_VIEW_VALID(view));
+ LOCK(&view->lock);
if (view->zonetable != NULL) {
result = dns_zt_find(view->zonetable, name, 0, NULL, zonep);
if (result == DNS_R_PARTIALMATCH) {
}
} else
result = ISC_R_NOTFOUND;
+ UNLOCK(&view->lock);
return (result);
}
node = NULL;
is_staticstub_zone = ISC_FALSE;
zone = NULL;
- if (view->zonetable != NULL) {
+ LOCK(&view->lock);
+ if (view->zonetable != NULL)
result = dns_zt_find(view->zonetable, name, 0, NULL, &zone);
- if (zone != NULL && !use_static_stub &&
- dns_zone_gettype(zone) == dns_zone_staticstub)
- result = ISC_R_NOTFOUND;
- } else
+ else
+ result = ISC_R_NOTFOUND;
+ UNLOCK(&view->lock);
+ if (zone != NULL && dns_zone_gettype(zone) == dns_zone_staticstub &&
+ !use_static_stub)
result = ISC_R_NOTFOUND;
if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH) {
result = dns_zone_getdb(zone, &db);
* Find the right database.
*/
zone = NULL;
+ LOCK(&view->lock);
if (view->zonetable != NULL)
result = dns_zt_find(view->zonetable, name, 0, NULL, &zone);
else
result = ISC_R_NOTFOUND;
+ UNLOCK(&view->lock);
if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH)
result = dns_zone_getdb(zone, &db);
if (result == ISC_R_NOTFOUND) {
* treat it as not found.
*/
zp = (zone1 == NULL) ? &zone1 : &zone2;
+ LOCK(&view->lock);
if (view->zonetable != NULL)
- result = dns_zt_find(view->zonetable, name, 0, NULL,
- zp);
+ result = dns_zt_find(view->zonetable, name, 0,
+ NULL, zp);
else
result = ISC_R_NOTFOUND;
+ UNLOCK(&view->lock);
INSIST(result == ISC_R_SUCCESS ||
result == ISC_R_NOTFOUND ||
result == DNS_R_PARTIALMATCH);
isc_result_t
dns_view_freezezones(dns_view_t *view, isc_boolean_t value) {
+
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(view->zonetable != NULL);
void
dns_view_setresstats(dns_view_t *view, isc_stats_t *stats) {
+
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(!view->frozen);
REQUIRE(view->resstats == NULL);