aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/multi.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/lib/multi.c b/lib/multi.c
index 93891bf04..ddefa9ec8 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -121,7 +121,13 @@ CURLM *curl_multi_init(void)
memset(multi, 0, sizeof(struct Curl_multi));
multi->type = CURL_MULTI_HANDLE;
}
-
+
+ multi->hostcache = Curl_hash_alloc(7, Curl_freednsinfo);
+ if(!multi->hostcache) {
+ /* failure, free mem and bail out */
+ free(multi);
+ multi = NULL;
+ }
return (CURLM *) multi;
}
@@ -150,6 +156,9 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
/* set the easy handle */
easy->easy_handle = easy_handle;
easy->state = CURLM_STATE_INIT;
+
+ /* for multi interface connections, we share DNS cache automaticly */
+ easy->easy_handle->hostcache = multi->hostcache;
/* We add this new entry first in the list. We make our 'next' point to the
previous next and our 'prev' point back to the 'first' struct */
@@ -332,16 +341,6 @@ CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
break;
case CURLM_STATE_CONNECT:
- if (Curl_global_host_cache_use(easy->easy_handle)) {
- easy->easy_handle->hostcache = Curl_global_host_cache_get();
- }
- else {
- if (multi->hostcache == NULL)
- multi->hostcache = Curl_hash_alloc(7, Curl_freednsinfo);
-
- easy->easy_handle->hostcache = multi->hostcache;
- }
-
/* Connect. We get a connection identifier filled in. */
Curl_pgrsTime(easy->easy_handle, TIMER_STARTSINGLE);
easy->result = Curl_connect(easy->easy_handle, &easy->easy_conn, &async);