goto cleanup; \
} while (0)
-#define RESSHUTDOWN(v) \
- ((atomic_load(&(v)->attributes) & DNS_VIEWATTR_RESSHUTDOWN) != 0)
-#define ADBSHUTDOWN(v) \
- ((atomic_load(&(v)->attributes) & DNS_VIEWATTR_ADBSHUTDOWN) != 0)
-#define REQSHUTDOWN(v) \
- ((atomic_load(&(v)->attributes) & DNS_VIEWATTR_REQSHUTDOWN) != 0)
-
#define DNS_VIEW_DELONLYHASH 111
#define DNS_VIEW_FAILCACHESIZE 1021
DNS_EVENT_VIEWREQSHUTDOWN, req_shutdown, view, NULL,
NULL, NULL);
- atomic_init(&view->attributes,
- (DNS_VIEWATTR_RESSHUTDOWN | DNS_VIEWATTR_ADBSHUTDOWN |
- DNS_VIEWATTR_REQSHUTDOWN));
-
isc_mem_attach(mctx, &view->mctx);
isc_mutex_init(&view->lock);
dns_dlzdb_t *dlzdb;
REQUIRE(!ISC_LINK_LINKED(view, link));
- REQUIRE(RESSHUTDOWN(view));
- REQUIRE(ADBSHUTDOWN(view));
- REQUIRE(REQSHUTDOWN(view));
isc_refcount_destroy(&view->references);
isc_refcount_destroy(&view->weakrefs);
isc_refcount_destroy(&view->references);
- if (!RESSHUTDOWN(view)) {
+ if (view->resolver != NULL) {
dns_resolver_shutdown(view->resolver);
}
- if (!ADBSHUTDOWN(view)) {
+ if (view->adb != NULL) {
dns_adb_shutdown(view->adb);
}
- if (!REQSHUTDOWN(view)) {
+ if (view->requestmgr != NULL) {
dns_requestmgr_shutdown(view->requestmgr);
}
isc_event_free(&event);
- atomic_fetch_or(&view->attributes, DNS_VIEWATTR_RESSHUTDOWN);
dns_view_weakdetach(&view);
}
isc_event_free(&event);
- atomic_fetch_or(&view->attributes, DNS_VIEWATTR_ADBSHUTDOWN);
-
dns_view_weakdetach(&view);
}
isc_event_free(&event);
- atomic_fetch_or(&view->attributes, DNS_VIEWATTR_REQSHUTDOWN);
-
dns_view_weakdetach(&view);
}
}
event = &view->resevent;
dns_resolver_whenshutdown(view->resolver, view->task, &event);
- atomic_fetch_and(&view->attributes, ~DNS_VIEWATTR_RESSHUTDOWN);
isc_refcount_increment(&view->weakrefs);
isc_mem_create(&mctx);
}
event = &view->adbevent;
dns_adb_whenshutdown(view->adb, view->task, &event);
- atomic_fetch_and(&view->attributes, ~DNS_VIEWATTR_ADBSHUTDOWN);
isc_refcount_increment(&view->weakrefs);
result = dns_requestmgr_create(
}
event = &view->reqevent;
dns_requestmgr_whenshutdown(view->requestmgr, view->task, &event);
- atomic_fetch_and(&view->attributes, ~DNS_VIEWATTR_REQSHUTDOWN);
isc_refcount_increment(&view->weakrefs);
return (ISC_R_SUCCESS);