From ad9e83a90ff756eb38099856cd80340189ae7d32 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Thu, 1 Apr 2004 08:40:36 +0000
Subject: [PATCH] Dirk Manske's fix that makes sure we cancel the ares resolve
 when we time out from a name resolve. Without this, we leak memory!

---
 lib/hostip.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/hostip.c b/lib/hostip.c
index 503231c0f7..6f25de94e0 100644
--- a/lib/hostip.c
+++ b/lib/hostip.c
@@ -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
-- 
GitLab