From: Mark Andrews Date: Wed, 30 Jul 2014 21:39:59 +0000 (+1000) Subject: [rt36611] X-Git-Tag: v9.8.8b2~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c06c0b0186db424bde614db0f2297fc2ae2728fd;p=thirdparty%2Fbind9.git [rt36611] 3903. [bug] Improve the accuracy of DiG's reported round trip time. [RT 36611] (cherry picked from commit bc5db10d721aa9bf570578e52e17371e67bfcf5c) (cherry picked from commit 8d3e18713e8837e84effe6736e95cef33e246597) --- diff --git a/CHANGES b/CHANGES index f666803e16d..30ced16e1fe 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 519ee0be748..d7f0b46adcc 100644 --- a/bin/dig/dig.c +++ b/bin/dig/dig.c @@ -239,7 +239,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]; @@ -247,10 +246,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); printf(";; Query time: %ld msec\n", (long int)diff/1000); printf(";; SERVER: %s(%s)\n", fromtext, query->servname); time(&tnow); @@ -276,7 +273,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); printf(";; Received %" ISC_PRINT_QUADFORMAT "u bytes " "from %s(%s) in %d ms\n\n", query->lookup->doing_xfr ? @@ -304,7 +301,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")]; if (query->lookup->trace || query->lookup->ns_search_only) { @@ -318,8 +314,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); snprintf(store, 19, " in %d ms.", (int)diff/1000); diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 06a8dfddbae..371dbe5f7f1 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -3165,6 +3165,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 ed6fc3ae04a..3a71ed6ccf4 100644 --- a/bin/dig/include/dig/dig.h +++ b/bin/dig/include/dig/dig.h @@ -220,6 +220,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; };