#include <isc/refcount.h>
#include <isc/result.h>
#include <isc/string.h>
+#include <isc/tid.h>
#include <isc/util.h>
#include <dns/client.h>
isc_mem_putanddetach(&resp->mctx, resp, sizeof(*resp));
validator_log(val, ISC_LOG_DEBUG(3), "in fetch_callback_dnskey");
- LOCK(&val->lock);
fetch = val->fetch;
val->fetch = NULL;
if (CANCELED(val)) {
validator_done(val, DNS_R_BROKENCHAIN);
}
}
- UNLOCK(&val->lock);
if (fetch != NULL) {
dns_resolver_destroyfetch(&fetch);
}
validator_log(val, ISC_LOG_DEBUG(3), "in fetch_callback_ds");
- LOCK(&val->lock);
fetch = val->fetch;
val->fetch = NULL;
done:
isc_mem_putanddetach(&resp->mctx, resp, sizeof(*resp));
- UNLOCK(&val->lock);
if (fetch != NULL) {
dns_resolver_destroyfetch(&fetch);
subvalidator->parent = NULL;
validator_log(val, ISC_LOG_DEBUG(3), "in validator_callback_dnskey");
- LOCK(&val->lock);
if (CANCELED(val)) {
validator_done(val, ISC_R_CANCELED);
} else if (eresult == ISC_R_SUCCESS) {
validator_done(val, DNS_R_BROKENCHAIN);
}
- UNLOCK(&val->lock);
-
dns_validator_destroy(&subvalidator);
dns_validator_detach(&val);
}
subvalidator->parent = NULL;
validator_log(val, ISC_LOG_DEBUG(3), "in validator_callback_ds");
- LOCK(&val->lock);
if (CANCELED(val)) {
validator_done(val, ISC_R_CANCELED);
} else if (eresult == ISC_R_SUCCESS) {
isc_result_totext(eresult));
validator_done(val, DNS_R_BROKENCHAIN);
}
- UNLOCK(&val->lock);
dns_validator_destroy(&subvalidator);
dns_validator_detach(&val);
val->subvalidator = NULL;
validator_log(val, ISC_LOG_DEBUG(3), "in validator_callback_cname");
- LOCK(&val->lock);
if (CANCELED(val)) {
validator_done(val, ISC_R_CANCELED);
} else if (eresult == ISC_R_SUCCESS) {
validator_done(val, DNS_R_BROKENCHAIN);
}
- UNLOCK(&val->lock);
-
dns_validator_destroy(&subvalidator);
dns_validator_detach(&val);
}
val->subvalidator = NULL;
validator_log(val, ISC_LOG_DEBUG(3), "in validator_callback_nsec");
- LOCK(&val->lock);
if (CANCELED(val)) {
validator_done(val, ISC_R_CANCELED);
} else if (result != ISC_R_SUCCESS) {
}
}
- UNLOCK(&val->lock);
-
dns_validator_destroy(&subvalidator);
dns_validator_detach(&val);
}
validator_log(val, ISC_LOG_DEBUG(3), "starting");
- LOCK(&val->lock);
-
if (val->rdataset != NULL && val->sigrdataset != NULL) {
isc_result_t saved_result;
validator_done(val, result);
}
- UNLOCK(&val->lock);
-
dns_validator_detach(&val);
}
REQUIRE(validatorp != NULL && *validatorp == NULL);
val = isc_mem_get(view->mctx, sizeof(*val));
- *val = (dns_validator_t){ .result = ISC_R_FAILURE,
+ *val = (dns_validator_t){ .tid = isc_tid(),
+ .result = ISC_R_FAILURE,
.rdataset = rdataset,
.sigrdataset = sigrdataset,
.name = name,
dns_message_attach(message, &val->message);
}
dns_view_attach(view, &val->view);
- isc_mutex_init(&val->lock);
result = dns_view_getsecroots(val->view, &val->keytable);
if (result != ISC_R_SUCCESS) {
return (ISC_R_SUCCESS);
cleanup:
- isc_mutex_destroy(&val->lock);
if (val->message != NULL) {
dns_message_detach(&val->message);
}
void
dns_validator_send(dns_validator_t *validator) {
REQUIRE(VALID_VALIDATOR(validator));
-
- LOCK(&validator->lock);
+ REQUIRE(validator->tid == isc_tid());
INSIST((validator->options & DNS_VALIDATOR_DEFER) != 0);
validator->options &= ~DNS_VALIDATOR_DEFER;
- UNLOCK(&validator->lock);
dns_validator_ref(validator);
isc_job_run(validator->loopmgr, validator_start, validator);
void
dns_validator_cancel(dns_validator_t *validator) {
REQUIRE(VALID_VALIDATOR(validator));
-
- LOCK(&validator->lock);
+ REQUIRE(validator->tid == isc_tid());
validator_log(validator, ISC_LOG_DEBUG(3), "dns_validator_cancel");
validator->attributes |= VALATTR_CANCELED;
}
- UNLOCK(&validator->lock);
}
static void
if (val->siginfo != NULL) {
isc_mem_put(mctx, val->siginfo, sizeof(*val->siginfo));
}
- isc_mutex_destroy(&val->lock);
dns_view_detach(&val->view);
if (val->message != NULL) {
dns_message_detach(&val->message);
*validatorp = NULL;
REQUIRE(VALID_VALIDATOR(val));
+ REQUIRE(val->tid == isc_tid());
- LOCK(&val->lock);
validator_log(val, ISC_LOG_DEBUG(4), "dns_validator_destroy");
- UNLOCK(&val->lock);
dns_validator_detach(&val);
}