From: Mark Andrews Date: Wed, 30 Jul 2014 21:39:59 +0000 (+1000) Subject: [rt36611] X-Git-Tag: v9.10.1b2~30 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=ecbce9696b56992eb0f92e2b74cc69031b0bba9a;p=thirdparty%2Fbind9.git [rt36611] 3903. [bug] Improve the accuracy of DiG's reported round trip time. [RT 36611] (cherry picked from commit bc5db10d721aa9bf570578e52e17371e67bfcf5c) --- diff --git a/CHANGES b/CHANGES index d27c9bbaba8..cd3161f0509 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3903. [bug] Improve the accuracy of DiG's reported round trip + time. [RT 36611] + 3902. [bug] liblwres wasn't handling link-local addresses in nameserver clauses in resolv.conf. [RT #36039] diff --git a/bin/dig/dig.c b/bin/dig/dig.c index 6542687f167..c240c412eff 100644 --- a/bin/dig/dig.c +++ b/bin/dig/dig.c @@ -255,7 +255,6 @@ help(void) { void received(int bytes, isc_sockaddr_t *from, dig_query_t *query) { isc_uint64_t diff; - isc_time_t now; time_t tnow; struct tm tmnow; char time_str[100]; @@ -263,10 +262,8 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) { isc_sockaddr_format(from, fromtext, sizeof(fromtext)); - TIME_NOW(&now); - if (query->lookup->stats && !short_form) { - diff = isc_time_microdiff(&now, &query->time_sent); + diff = isc_time_microdiff(&query->time_recv, &query->time_sent); if (use_usec) printf(";; Query time: %ld usec\n", (long) diff); else @@ -295,7 +292,7 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) { } puts(""); } else if (query->lookup->identify && !short_form) { - diff = isc_time_microdiff(&now, &query->time_sent); + diff = isc_time_microdiff(&query->time_recv, &query->time_sent); if (use_usec) printf(";; Received %" ISC_PRINT_QUADFORMAT "u bytes " "from %s(%s) in %ld us\n\n", @@ -331,7 +328,6 @@ static isc_result_t say_message(dns_rdata_t *rdata, dig_query_t *query, isc_buffer_t *buf) { isc_result_t result; isc_uint64_t diff; - isc_time_t now; char store[sizeof("12345678901234567890")]; unsigned int styleflags = 0; @@ -349,8 +345,7 @@ say_message(dns_rdata_t *rdata, dig_query_t *query, isc_buffer_t *buf) { return (result); check_result(result, "dns_rdata_totext"); if (query->lookup->identify) { - TIME_NOW(&now); - diff = isc_time_microdiff(&now, &query->time_sent); + diff = isc_time_microdiff(&query->time_recv, &query->time_sent); ADD_STRING(buf, " from server "); ADD_STRING(buf, query->servname); if (use_usec) diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index b35dd301b4a..4e2e69ec5fc 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -3388,6 +3388,7 @@ recv_done(isc_task_t *task, isc_event_t *event) { INSIST(recvcount >= 0); query = event->ev_arg; + TIME_NOW(&query->time_recv); debug("lookup=%p, query=%p", query->lookup, query); l = query->lookup; diff --git a/bin/dig/include/dig/dig.h b/bin/dig/include/dig/dig.h index 6d491691c28..9708cfda830 100644 --- a/bin/dig/include/dig/dig.h +++ b/bin/dig/include/dig/dig.h @@ -228,6 +228,7 @@ struct dig_query { ISC_LINK(dig_query_t) clink; isc_sockaddr_t sockaddr; isc_time_t time_sent; + isc_time_t time_recv; isc_uint64_t byte_count; isc_buffer_t sendbuf; };