From: hniksic Date: Mon, 17 Nov 2003 20:51:27 +0000 (-0800) Subject: [svn] Don't reference address list after releasing it. X-Git-Tag: v1.13~1381 X-Git-Url: http://sjero.net/git/?p=wget;a=commitdiff_plain;h=e4c730c3a5684947b2cdd0d86eaa43721f816ebd [svn] Don't reference address list after releasing it. --- diff --git a/src/ChangeLog b/src/ChangeLog index 8b7f945a..ceda154d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2003-11-17 Hrvoje Niksic + + * connect.c (connect_to_host): Don't reference address list after + releasing it. + 2003-11-17 Hrvoje Niksic * main.c (print_help): Fix alignment of FTP options output. diff --git a/src/connect.c b/src/connect.c index 4b09c2da..fe7206a5 100644 --- a/src/connect.c +++ b/src/connect.c @@ -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