uint8_t unsupported_digest;
dns_rdata_t rdata;
bool resume;
- uint32_t *nvalidations;
- uint32_t *nfails;
+ isc_counter_t *nvalidations;
+ isc_counter_t *nfails;
isc_counter_t *qc;
isc_counter_t *gqc;
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset,
dns_message_t *message, unsigned int options,
isc_loop_t *loop, isc_job_cb cb, void *arg,
- uint32_t *nvalidations, uint32_t *nfails,
+ isc_counter_t *nvalidations, isc_counter_t *nfails,
isc_counter_t *qc, isc_counter_t *gqc,
dns_edectx_t *edectx, dns_validator_t **validatorp);
/*%<
unsigned int depth;
char clientstr[ISC_SOCKADDR_FORMATSIZE];
- uint32_t nvalidations;
- uint32_t nfails;
+ isc_counter_t *nvalidations;
+ isc_counter_t *nfails;
};
#define FCTX_MAGIC ISC_MAGIC('F', '!', '!', '!')
result = dns_validator_create(
fctx->res->view, name, type, rdataset, sigrdataset, message,
- valoptions, fctx->loop, validated, valarg, &fctx->nvalidations,
- &fctx->nfails, fctx->qc, fctx->gqc, &fctx->edectx, &validator);
+ valoptions, fctx->loop, validated, valarg, fctx->nvalidations,
+ fctx->nfails, fctx->qc, fctx->gqc, &fctx->edectx, &validator);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
inc_stats(fctx->res, dns_resstatscounter_val);
ISC_LIST_APPEND(fctx->validators, validator, link);
isc_mem_put(fctx->mctx, sa, sizeof(*sa));
}
+ if (fctx->nfails != NULL) {
+ isc_counter_detach(&fctx->nfails);
+ }
+ if (fctx->nvalidations != NULL) {
+ isc_counter_detach(&fctx->nvalidations);
+ }
isc_counter_detach(&fctx->qc);
if (fctx->gqc != NULL) {
isc_counter_detach(&fctx->gqc);
char buf[DNS_NAME_FORMATSIZE + DNS_RDATATYPE_FORMATSIZE + 1];
isc_mem_t *mctx = isc_loop_getmctx(loop);
size_t p;
+ uint32_t nvalidations = atomic_load_relaxed(&res->maxvalidations);
+ uint32_t nfails = atomic_load_relaxed(&res->maxvalidationfails);
/*
* Caller must be holding the lock for 'bucket'
.fwdpolicy = dns_fwdpolicy_none,
.result = ISC_R_FAILURE,
.loop = loop,
- .nvalidations = atomic_load_relaxed(&res->maxvalidations),
- .nfails = atomic_load_relaxed(&res->maxvalidationfails),
};
isc_mem_attach(mctx, &fctx->mctx);
FCTXTRACE("create");
+ if (nfails > 0) {
+ isc_counter_create(mctx, nfails, &fctx->nfails);
+ }
+
+ if (nvalidations > 0) {
+ isc_counter_create(mctx, nvalidations, &fctx->nvalidations);
+ }
+
if (qc != NULL) {
isc_counter_attach(qc, &fctx->qc);
isc_log_write(DNS_LOGCATEGORY_RESOLVER, DNS_LOGMODULE_RESOLVER,
dns_rdataset_disassociate(&fctx->nameservers);
}
isc_mem_free(fctx->mctx, fctx->info);
+ if (fctx->nfails != NULL) {
+ isc_counter_detach(&fctx->nfails);
+ }
+ if (fctx->nvalidations != NULL) {
+ isc_counter_detach(&fctx->nvalidations);
+ }
isc_counter_detach(&fctx->qc);
if (fctx->gqc != NULL) {
isc_counter_detach(&fctx->gqc);
static bool
over_max_validations(dns_validator_t *val) {
- if (val->nvalidations == NULL || (*val->nvalidations) > 0) {
+ if (val->nvalidations == NULL ||
+ isc_counter_used(val->nvalidations) <
+ isc_counter_getlimit(val->nvalidations))
+ {
return false;
}
if (val->nvalidations == NULL) {
return;
}
- INSIST((*val->nvalidations) > 0);
-
- (*val->nvalidations)--;
+ (void)isc_counter_increment(val->nvalidations);
}
static bool
over_max_fails(dns_validator_t *val) {
- if (val->nfails == NULL || (*val->nfails) > 0) {
+ if (val->nfails == NULL ||
+ isc_counter_used(val->nfails) < isc_counter_getlimit(val->nfails))
+ {
return false;
}
if (val->nfails == NULL) {
return;
}
- INSIST((*val->nfails) > 0);
-
- (*val->nfails)--;
+ (void)isc_counter_increment(val->nfails);
}
/*%
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset,
dns_message_t *message, unsigned int options,
isc_loop_t *loop, isc_job_cb cb, void *arg,
- uint32_t *nvalidations, uint32_t *nfails,
+ isc_counter_t *nvalidations, isc_counter_t *nfails,
isc_counter_t *qc, isc_counter_t *gqc,
dns_edectx_t *edectx, dns_validator_t **validatorp) {
isc_result_t result = ISC_R_FAILURE;
.cb = cb,
.arg = arg,
.rdata = DNS_RDATA_INIT,
- .nvalidations = nvalidations,
- .nfails = nfails,
.edectx = edectx,
};
dns_message_attach(message, &val->message);
}
+ if (nfails != NULL) {
+ isc_counter_attach(nfails, &val->nfails);
+ }
+
+ if (nvalidations != NULL) {
+ isc_counter_attach(nvalidations, &val->nvalidations);
+ }
+
if (qc != NULL) {
isc_counter_attach(qc, &val->qc);
}
if (val->message != NULL) {
dns_message_detach(&val->message);
}
+ if (val->nfails != NULL) {
+ isc_counter_detach(&val->nfails);
+ }
+ if (val->nvalidations != NULL) {
+ isc_counter_detach(&val->nvalidations);
+ }
if (val->qc != NULL) {
isc_counter_detach(&val->qc);
}