diff --git a/lib/dns/adb.c b/lib/dns/adb.c index d32c56f3b7..55dfd83f84 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -2909,6 +2909,7 @@ fetch_name(dns_adbname_t *adbname, bool start_at_zone, bool no_validation, * createfetch to find deepest cached name when we're providing * domain and nameservers. */ + dns_adbname_ref(adbname); result = dns_resolver_createfetch( adb->res, adbname->name, type, name, nameservers, NULL, NULL, 0, options, depth, qc, gqc, isc_loop(), fetch_callback, adbname, @@ -2916,11 +2917,10 @@ fetch_name(dns_adbname_t *adbname, bool start_at_zone, bool no_validation, if (result != ISC_R_SUCCESS) { DP(ENTER_LEVEL, "fetch_name: createfetch failed with %s", isc_result_totext(result)); + dns_adbname_unref(adbname); goto cleanup; } - dns_adbname_ref(adbname); - if (type == dns_rdatatype_a) { adbname->fetch_a = fetch; inc_resstats(adb, dns_resstatscounter_gluefetchv4);