]> sjero.net Git - wget/commitdiff
[svn] Don't reference address list after releasing it.
authorhniksic <devnull@localhost>
Mon, 17 Nov 2003 20:51:27 +0000 (12:51 -0800)
committerhniksic <devnull@localhost>
Mon, 17 Nov 2003 20:51:27 +0000 (12:51 -0800)
src/ChangeLog
src/connect.c

index 8b7f945a4955a9a53494c0021a9b7d2534ba254a..ceda154da8528700c09f8fa02fd90873c69fa55a 100644 (file)
@@ -1,3 +1,8 @@
+2003-11-17  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * connect.c (connect_to_host): Don't reference address list after
+       releasing it.
+
 2003-11-17  Hrvoje Niksic  <hniksic@xemacs.org>
 
        * main.c (print_help): Fix alignment of FTP options output.
index 4b09c2da9739c05b973b40457831a3841ababf3d..fe7206a529b4f5c0044a41e0d046ac593e768663 100644 (file)
@@ -332,12 +332,11 @@ int
 connect_to_host (const char *host, int port)
 {
   int i, start, end;
-  struct address_list *al;
-  int lh_flags = 0;
-  int sock = -1;
+  int sock;
+
+  struct address_list *al = lookup_host (host, 0);
 
- again:
-  al = lookup_host (host, lh_flags);
+ retry:
   if (!al)
     return E_HOST;
 
@@ -347,31 +346,32 @@ connect_to_host (const char *host, int port)
       const ip_address *ip = address_list_address_at (al, i);
       sock = connect_to_ip (ip, port, host);
       if (sock >= 0)
-       /* Success. */
-       break;
-
-      address_list_set_faulty (al, i);
+       {
+         /* Success. */
+         address_list_set_connected (al);
+         address_list_release (al);
+         return sock;
+       }
 
       /* The attempt to connect has failed.  Continue with the loop
         and try next address. */
+
+      address_list_set_faulty (al, i);
     }
-  address_list_release (al);
 
-  if (sock >= 0)
-    /* Mark a successful connection to one of the addresses. */
-    address_list_set_connected (al);
+  /* Failed to connect to any of the addresses in AL. */
 
-  if (sock < 0 && address_list_connected_p (al))
+  if (address_list_connected_p (al))
     {
-      /* We are unable to connect to any of HOST's addresses, although
-        we were previously able to connect to HOST.  That might
-        indicate that HOST is under dynamic DNS and the addresses
-        we're connecting to have expired.  Resolve it again.  */
-      lh_flags |= LH_REFRESH;
-      goto again;
+      /* We connected to AL before, but cannot do so now.  That might
+        indicate that our DNS cache entry for HOST has expired.  */
+      address_list_release (al);
+      al = lookup_host (host, LH_REFRESH);
+      goto retry;
     }
+  address_list_release (al);
 
-  return sock;
+  return -1;
 }
 
 int