From b605bbbb0f1e2f5166d354fe6576eba210e62edf Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 4 Mar 2010 06:49:41 +0000 Subject: [PATCH] 2957. [bug] RTT estimates were not being adjusted on ICMP errors. [RT #20772] --- CHANGES | 3 +++ lib/dns/resolver.c | 12 +++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 183971c902..8bbf0a7bd0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2957. [bug] RTT estimates were not being adjusted on ICMP errors. + [RT #20772] + 2956. [bug] named-checkconf did not fail on a bad trusted key. [RT #20705] diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 5a1b3240f1..d00c88d0d5 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resolver.c,v 1.384.14.22 2010/02/25 10:56:41 tbox Exp $ */ +/* $Id: resolver.c,v 1.384.14.23 2010/03/04 06:49:41 marka Exp $ */ /*! \file */ @@ -6090,6 +6090,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) { unsigned int findoptions; isc_result_t broken_server; badnstype_t broken_type = badns_response; + isc_boolean_t no_response; REQUIRE(VALID_QUERY(query)); fctx = query->fctx; @@ -6112,6 +6113,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) { resend = ISC_FALSE; truncated = ISC_FALSE; finish = NULL; + no_response = ISC_FALSE; if (fctx->res->exiting) { result = ISC_R_SHUTTINGDOWN; @@ -6159,7 +6161,9 @@ resquery_response(isc_task_t *task, isc_event_t *event) { /* * If this is a network error on an exclusive query * socket, mark the server as bad so that we won't try - * it for this fetch again. + * it for this fetch again. Also adjust finish and + * no_response so that we penalize this address in SRTT + * adjustment later. */ if (query->exclusivesocket && (devent->result == ISC_R_HOSTUNREACH || @@ -6168,6 +6172,8 @@ resquery_response(isc_task_t *task, isc_event_t *event) { devent->result == ISC_R_CANCELED)) { broken_server = devent->result; broken_type = badns_unreachable; + finish = NULL; + no_response = ISC_TRUE; } } goto done; @@ -6641,7 +6647,7 @@ resquery_response(isc_task_t *task, isc_event_t *event) { * * XXXRTH Don't cancel the query if waiting for validation? */ - fctx_cancelquery(&query, &devent, finish, ISC_FALSE); + fctx_cancelquery(&query, &devent, finish, no_response); if (keep_trying) { if (result == DNS_R_FORMERR)