res->algorithms = NULL;
res->digests = NULL;
res->badcache = NULL;
- dns_badcache_init(res->mctx, DNS_RESOLVER_BADCACHESIZE,
- &res->badcache);
+ result = dns_badcache_init(res->mctx, DNS_RESOLVER_BADCACHESIZE,
+ &res->badcache);
+ if (result != ISC_R_SUCCESS) {
+ goto cleanup_res;
+ }
res->mustbesecure = NULL;
res->spillatmin = res->spillat = 10;
res->spillatmax = 100;
ntasks * sizeof(fctxbucket_t));
if (res->buckets == NULL) {
result = ISC_R_NOMEMORY;
- goto cleanup_res;
+ goto cleanup_badcache;
}
for (i = 0; i < ntasks; i++) {
result = isc_mutex_init(&res->buckets[i].lock);
isc_mem_put(view->mctx, res->buckets,
res->nbuckets * sizeof(fctxbucket_t));
+ cleanup_badcache:
+ dns_badcache_destroy(&res->badcache);
+
cleanup_res:
isc_mem_put(view->mctx, res, sizeof(*res));
view->cfg_destroy = NULL;
view->fail_ttl = 0;
view->failcache = NULL;
- (void)dns_badcache_init(view->mctx, DNS_VIEW_FAILCACHESIZE,
+ result = dns_badcache_init(view->mctx, DNS_VIEW_FAILCACHESIZE,
&view->failcache);
+ if (result != ISC_R_SUCCESS) {
+ goto cleanup_dynkeys;
+ }
view->v6bias = 0;
view->dtenv = NULL;
view->dttypes = 0;
result = isc_mutex_init(&view->new_zone_lock);
- if (result != ISC_R_SUCCESS)
- goto cleanup_dynkeys;
+ if (result != ISC_R_SUCCESS) {
+ goto cleanup_failcache;
+ }
result = dns_order_create(view->mctx, &view->order);
if (result != ISC_R_SUCCESS) {
}
result = dns_peerlist_new(view->mctx, &view->peers);
- if (result != ISC_R_SUCCESS)
+ if (result != ISC_R_SUCCESS) {
goto cleanup_order;
+ }
result = dns_aclenv_init(view->mctx, &view->aclenv);
- if (result != ISC_R_SUCCESS)
+ if (result != ISC_R_SUCCESS) {
goto cleanup_peerlist;
+ }
ISC_LINK_INIT(view, link);
ISC_EVENT_INIT(&view->resevent, sizeof(view->resevent), 0, NULL,
return (ISC_R_SUCCESS);
cleanup_peerlist:
- if (view->peers != NULL)
+ if (view->peers != NULL) {
dns_peerlist_detach(&view->peers);
+ }
cleanup_order:
- if (view->order != NULL)
+ if (view->order != NULL) {
dns_order_detach(&view->order);
+ }
cleanup_new_zone_lock:
DESTROYLOCK(&view->new_zone_lock);
+ cleanup_failcache:
+ dns_badcache_destroy(&view->failcache);
+
cleanup_dynkeys:
- if (view->dynamickeys != NULL)
+ if (view->dynamickeys != NULL) {
dns_tsigkeyring_detach(&view->dynamickeys);
+ }
cleanup_references:
INSIST(isc_refcount_decrement(&view->references) > 0);
isc_refcount_destroy(&view->references);
- if (view->fwdtable != NULL)
+ if (view->fwdtable != NULL) {
dns_fwdtable_destroy(&view->fwdtable);
+ }
cleanup_zt:
- if (view->zonetable != NULL)
+ if (view->zonetable != NULL) {
dns_zt_detach(&view->zonetable);
+ }
cleanup_mutex:
DESTROYLOCK(&view->lock);
- if (view->nta_file != NULL)
+ if (view->nta_file != NULL) {
isc_mem_free(mctx, view->nta_file);
+ }
cleanup_name:
isc_mem_free(mctx, view->name);