]> 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:43:57 +0000 (07:43 +1000)
3903.   [bug]           Improve the accuracy of DiG's reported round trip
                        time. [RT 36611]

(cherry picked from commit bc5db10d721aa9bf570578e52e17371e67bfcf5c)

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

diff --git a/CHANGES b/CHANGES
index d27c9bbaba8cb6e1482295b5543ed72afd622db8..cd3161f05097d894113daf36e4e9c81fabd0b3e2 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 6542687f16788affe2a3eddaa66cd6f4af7d7f95..c240c412effe20dea24f2b2261528d0ea0358066 100644 (file)
@@ -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)
index b35dd301b4a8141850b490249498f5ba0f9c9b6f..4e2e69ec5fc9b34f38c546f510494eb3e70c0148 100644 (file)
@@ -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;
index 6d491691c2821efdfab2b9ca2b597b9438d553aa..9708cfda8300d2c461a3677f7487b5794e7e97c5 100644 (file)
@@ -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;
 };