]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[rt36611]
authorMark Andrews <marka@isc.org>
Wed, 30 Jul 2014 21:39:59 +0000 (07:39 +1000)
committerMark Andrews <marka@isc.org>
Wed, 30 Jul 2014 21:46:28 +0000 (07:46 +1000)
3903.   [bug]           Improve the accuracy of DiG's reported round trip
                        time. [RT 36611]

(cherry picked from commit bc5db10d721aa9bf570578e52e17371e67bfcf5c)
(cherry picked from commit 8d3e18713e8837e84effe6736e95cef33e246597)

CHANGES
bin/dig/dig.c
bin/dig/dighost.c
bin/dig/include/dig/dig.h

diff --git a/CHANGES b/CHANGES
index f666803e16d00ebd3b403bba892254eaacbbe397..30ced16e1fec259a60676ecfb68f222c92838b80 100644 (file)
--- 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]
 
index 519ee0be748e46faef0cada5d776313ebbc2631a..d7f0b46adccf081c2894abb04757a4ad3f8e5e43 100644 (file)
@@ -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);
index 06a8dfddbae477be3af9f62659a69176708f7521..371dbe5f7f11e37822e22d63cce8f554a38087c9 100644 (file)
@@ -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;
index ed6fc3ae04acdfdefdb36b6c98ba0988d289d72e..3a71ed6ccf4aa6184ad04de5a3eb494c89de78a5 100644 (file)
@@ -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;
 };