Dirk Manske's fix that makes sure we cancel the ares resolve when we time out
authorDaniel Stenberg <daniel@haxx.se>
Thu, 1 Apr 2004 08:40:36 +0000 (08:40 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 1 Apr 2004 08:40:36 +0000 (08:40 +0000)
from a name resolve. Without this, we leak memory!

lib/hostip.c

index 503231c..6f25de9 100644 (file)
@@ -617,7 +617,7 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn,
     timeout = conn->data->set.timeout;
 
   /* Wait for the name resolve query to complete. */
-  while (timeout > 0) {
+  while (1) {
     int nfds=0;
     fd_set read_fds, write_fds;
     struct timeval *tvp, tv, store;
@@ -641,6 +641,11 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn,
     ares_process(data->state.areschannel, &read_fds, &write_fds);
 
     timeout -= Curl_tvdiff(Curl_tvnow(), now)/1000; /* spent time */
+    if (timeout < 0) {
+      /* our timeout, so we cancel the ares operation */
+      ares_cancel(data->state.areschannel);
+      break;
+    }
   }
 
   /* Operation complete, if the lookup was successful we now have the entry