multi.c: OOM handling fix
authorYang Tse <yangsita@gmail.com>
Thu, 27 Oct 2011 15:08:02 +0000 (17:08 +0200)
committerYang Tse <yangsita@gmail.com>
Thu, 27 Oct 2011 15:08:02 +0000 (17:08 +0200)
Fix curl_multi_cleanup() segfault when using weird cleanup sequence.

lib/multi.c

index 5026f8d..63aac69 100644 (file)
@@ -1775,10 +1775,6 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle)
 
   if(GOOD_MULTI_HANDLE(multi)) {
     multi->type = 0; /* not good anymore */
-    Curl_hash_destroy(multi->hostcache);
-    Curl_hash_destroy(multi->sockhash);
-    multi->hostcache = NULL;
-    multi->sockhash = NULL;
 
     /* go over all connections that have close actions */
     for(i=0; i< multi->connc->num; i++) {
@@ -1802,6 +1798,12 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle)
       cl= n;
     }
 
+    Curl_hash_destroy(multi->hostcache);
+    multi->hostcache = NULL;
+
+    Curl_hash_destroy(multi->sockhash);
+    multi->sockhash = NULL;
+
     Curl_rm_connc(multi->connc);
     multi->connc = NULL;