]> granicus.if.org Git - curl/commitdiff
remove_handle: call multi_done() first, then clear dns cache pointer
authorDaniel Stenberg <daniel@haxx.se>
Sat, 7 Oct 2017 20:00:48 +0000 (22:00 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 7 Oct 2017 21:54:33 +0000 (23:54 +0200)
Closes #1960

lib/multi.c

index ec679ba4a0ff41613ea71768a5fbfcab55e1de71..c87515969643597ecd8b39e13242e34380058a45 100644 (file)
@@ -711,12 +711,6 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
      curl_easy_cleanup is called. */
   Curl_expire_clear(data);
 
-  if(data->dns.hostcachetype == HCACHE_MULTI) {
-    /* stop using the multi handle's DNS cache */
-    data->dns.hostcache = NULL;
-    data->dns.hostcachetype = HCACHE_NONE;
-  }
-
   if(data->easy_conn) {
 
     /* we must call multi_done() here (if we still own the connection) so that
@@ -735,6 +729,13 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
       Curl_getoff_all_pipelines(data, data->easy_conn);
   }
 
+  if(data->dns.hostcachetype == HCACHE_MULTI) {
+    /* stop using the multi handle's DNS cache, *after* the possible
+       multi_done() call above */
+    data->dns.hostcache = NULL;
+    data->dns.hostcachetype = HCACHE_NONE;
+  }
+
   Curl_wildcard_dtor(&data->wildcard);
 
   /* destroy the timeout list that is held in the easy handle, do this *after*