Robson Braga Araujo fixed a memory leak when you added an easy handle to a
authorDaniel Stenberg <daniel@haxx.se>
Tue, 9 May 2006 11:33:00 +0000 (11:33 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 9 May 2006 11:33:00 +0000 (11:33 +0000)
multi stack and that easy handle had already been used to do one or more
easy interface transfers, as then the code threw away the previously used
DNS cache without properly freeing it.

CHANGES
RELEASE-NOTES
lib/multi.c

diff --git a/CHANGES b/CHANGES
index 03fd1ba92bf23463bcb13010191548f4c9cd7ac9..b6845fa16a0d2865776cecd64ecde8ffd225f6d4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,12 @@
 
                                   Changelog
 
+Daniel (9 May 2006)
+- Robson Braga Araujo fixed a memory leak when you added an easy handle to a
+  multi stack and that easy handle had already been used to do one or more
+  easy interface transfers, as then the code threw away the previously used
+  DNS cache without properly freeing it.
+
 Daniel (8 May 2006)
 - Fixed known bug #28. The TFTP code no longer assumes a packed struct and
   thus works reliably on more platforms.
index 208e5b1be05e2b5dc41518d39f490fca3b9d0d78..e130302eb6aa4602ae252381199a5a245f3d170a 100644 (file)
@@ -20,6 +20,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o possible memory leak when adding easy handles to multi stack
  o TFTP works in a more portable fashion (== on more platforms)
  o WSAGetLastError() is now used (better) on Windows
  o GnuTLS non-block case that could cause data trashing
index c0f9a7918808c22938db04696dd3b252434319c9..c3463b0ced6a94f4c6fa6b46dc170af782b725e7 100644 (file)
@@ -315,7 +315,12 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
   easy->easy_handle = easy_handle;
   multistate(easy, CURLM_STATE_INIT);
 
-  /* for multi interface connections, we share DNS cache automaticly */
+  /* for multi interface connections, we share DNS cache automaticly.
+     First kill the existing one if there is any. */
+  if (easy->easy_handle->hostcache &&
+      easy->easy_handle->hostcache != multi->hostcache)
+    Curl_hash_destroy(easy->easy_handle->hostcache);
+
   easy->easy_handle->hostcache = multi->hostcache;
 
   /* We add this new entry first in the list. We make our 'next' point to the