isc_mutex_t lock;
ISC_LIST(fetchctx_t) fctxs;
atomic_bool exiting;
- isc_mem_t *mctx;
} fctxbucket_t;
typedef struct fctxcount fctxcount_t;
isc_interval_t interval;
unsigned int findoptions = 0;
char buf[DNS_NAME_FORMATSIZE + DNS_RDATATYPE_FORMATSIZE + 1];
- isc_mem_t *mctx = NULL;
size_t p;
/*
*/
REQUIRE(fctxp != NULL && *fctxp == NULL);
- mctx = res->buckets[bucketnum].mctx;
- fctx = isc_mem_get(mctx, sizeof(*fctx));
+ fctx = isc_mem_get(res->mctx, sizeof(*fctx));
*fctx = (fetchctx_t){
.type = type,
.qmintype = type,
p = strlcat(buf, "/", sizeof(buf));
INSIST(p + DNS_RDATATYPE_FORMATSIZE < sizeof(buf));
dns_rdatatype_format(type, buf + p, sizeof(buf) - p);
- fctx->info = isc_mem_strdup(mctx, buf);
+ fctx->info = isc_mem_strdup(res->mctx, buf);
FCTXTRACE("create");
goto cleanup_fcount;
}
- dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &fctx->qmessage);
+ dns_message_create(res->mctx, DNS_MESSAGE_INTENTRENDER,
+ &fctx->qmessage);
/*
* Compute an expiration time for the entire fetch.
*/
dns_db_attach(res->view->cachedb, &fctx->cache);
dns_adb_attach(res->view->adb, &fctx->adb);
- isc_mem_attach(mctx, &fctx->mctx);
+ isc_mem_attach(res->mctx, &fctx->mctx);
ISC_LIST_INIT(fctx->events);
ISC_LINK_INIT(fctx, link);
if (dns_rdataset_isassociated(&fctx->nameservers)) {
dns_rdataset_disassociate(&fctx->nameservers);
}
- isc_mem_free(mctx, fctx->info);
+ isc_mem_free(res->mctx, fctx->info);
isc_counter_detach(&fctx->qc);
cleanup_fetch:
dns_resolver_detach(&fctx->res);
- isc_mem_put(mctx, fctx, sizeof(*fctx));
+ isc_mem_put(res->mctx, fctx, sizeof(*fctx));
return (result);
}
isc_task_shutdown(res->buckets[i].task);
isc_task_detach(&res->buckets[i].task);
isc_mutex_destroy(&res->buckets[i].lock);
- isc_mem_detach(&res->buckets[i].mctx);
}
isc_mem_put(res->mctx, res->buckets,
res->nbuckets * sizeof(fctxbucket_t));
dns_resolver_resetmustbesecure(res);
isc_timer_detach(&res->spillattimer);
res->magic = 0;
- isc_mem_put(res->mctx, res, sizeof(*res));
+ isc_mem_putanddetach(&res->mctx, res, sizeof(*res));
}
static void
RTRACE("create");
res = isc_mem_get(view->mctx, sizeof(*res));
- *res = (dns_resolver_t){ .mctx = view->mctx,
- .rdclass = view->rdclass,
+ *res = (dns_resolver_t){ .rdclass = view->rdclass,
.nm = nm,
.timermgr = timermgr,
.taskmgr = taskmgr,
atomic_init(&res->activebuckets, ntasks);
+ isc_mem_attach(view->mctx, &res->mctx);
+
res->quotaresp[dns_quotatype_zone] = DNS_R_DROP;
res->quotaresp[dns_quotatype_server] = DNS_R_SERVFAIL;
isc_refcount_init(&res->references, 1);
snprintf(name, sizeof(name), "res%" PRIu32, i);
isc_task_setname(res->buckets[i].task, name, res);
- isc_mem_attach(view->mctx, &res->buckets[i].mctx);
-
ISC_LIST_INIT(res->buckets[i].fctxs);
atomic_init(&res->buckets[i].exiting, false);
}
cleanup_buckets:
for (size_t i = 0; i < ntasks; i++) {
- isc_mem_detach(&res->buckets[i].mctx);
isc_mutex_destroy(&res->buckets[i].lock);
isc_task_shutdown(res->buckets[i].task);
isc_task_detach(&res->buckets[i].task);