Author: amc
Date: Fri Sep 16 20:08:58 2011
New Revision: 1171753

URL: http://svn.apache.org/viewvc?rev=1171753&view=rev
Log:
DNS fixes for TS-958 - remove self copying.

Modified:
    trafficserver/traffic/trunk/iocore/dns/DNS.cc
    trafficserver/traffic/trunk/lib/ts/ink_res_init.cc

Modified: trafficserver/traffic/trunk/iocore/dns/DNS.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/dns/DNS.cc?rev=1171753&r1=1171752&r2=1171753&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/dns/DNS.cc (original)
+++ trafficserver/traffic/trunk/iocore/dns/DNS.cc Fri Sep 16 20:08:58 2011
@@ -419,7 +419,7 @@ DNSHandler::open_con(sockaddr const* tar
 
   Debug("dns", "open_con: opening connection %s", ink_inet_nptop(target, 
ip_text, sizeof ip_text));
 
-  if (!icon) {
+  if (!icon && target) {
     ink_inet_copy(&ip, target);
   }
 
@@ -510,7 +510,7 @@ DNSHandler::startEvent(int event, Event 
       }
       dns_ns_rr_init_down = 0;
     } else {
-      open_con(&ip.sa);
+      open_con(0); // use current target address.
       n_con = 1;
     }
     e->ethread->schedule_every(this, DNS_PERIOD);

Modified: trafficserver/traffic/trunk/lib/ts/ink_res_init.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_res_init.cc?rev=1171753&r1=1171752&r2=1171753&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_res_init.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_res_init.cc Fri Sep 16 20:08:58 2011
@@ -118,9 +118,20 @@ ink_res_setservers(ink_res_state statp, 
   /* cause rtt times to be forgotten */
   statp->nscount = 0;
 
+  /* The goal here seems to be to compress the source list (@a set) by
+     squeezing out invalid addresses. We handle the special case where
+     the destination and sourcea are the same.
+  */
   int nserv = 0;
   for ( ts_ip_endpoint const* limit = set + cnt ; nserv < INK_MAXNS && set < 
limit ; ++set ) {
-    if (ink_inet_copy(&statp->nsaddr_list[nserv].sa, &set->sa)) ++nserv;
+    ts_ip_endpoint* dst = &statp->nsaddr_list[nserv];
+
+    if (dst == set) {
+      if (ink_inet_is_ip(&set->sa))
+        ++nserv;
+    } else if (ink_inet_copy(&dst->sa, &set->sa)) {
+      ++nserv;
+    }
   }
   statp->nscount = nserv;
 }


Reply via email to