diff --git a/CHANGES b/CHANGES index 3250a190e5..750cf4adf6 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4045. [bug] Skip to next master on dns_request_createvia4 failure. + [RT #25185] + 4044. [bug] Change 3955 was not complete, resulting in an assertion failure if the timing was just right. [RT #38352] diff --git a/lib/dns/zone.c b/lib/dns/zone.c index ab1b953d87..d7c7444ed3 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -11674,14 +11674,11 @@ soa_query(isc_task_t *task, isc_event_t *event) { goto cleanup; } - /* - * XXX Optimisation: Create message when zone is setup and reuse. - */ + again: result = create_query(zone, dns_rdatatype_soa, &message); if (result != ISC_R_SUCCESS) goto cleanup; - again: INSIST(zone->masterscnt > 0); INSIST(zone->curmaster < zone->masterscnt); @@ -11803,9 +11800,9 @@ soa_query(isc_task_t *task, isc_event_t *event) { if (result != ISC_R_SUCCESS) { zone_idetach(&dummy); zone_debuglog(zone, me, 1, - "dns_request_createvia2() failed: %s", + "dns_request_createvia4() failed: %s", dns_result_totext(result)); - goto cleanup; + goto skip_master; } else { if (isc_sockaddr_pf(&zone->masteraddr) == PF_INET) inc_stats(zone, dns_zonestatscounter_soaoutv4); @@ -11831,6 +11828,7 @@ soa_query(isc_task_t *task, isc_event_t *event) { skip_master: if (key != NULL) dns_tsigkey_detach(&key); + dns_message_destroy(&message); /* * Skip to next failed / untried master. */