mirror of
https://github.com/curl/curl.git
synced 2026-07-23 16:07:16 +03:00
Dirk Manske made the share-locking around DNS lookups a bit "looser" so that
multiple DNS lookups can run simultaneously faster. The downside is that resolving the same host name now can be made at once from multiple threads, but the upside is that threads now don't alwys have to wait for the others' resolves. Test case 506 updated accordingly.
This commit is contained in:
parent
4935853eb9
commit
022996e5c7
2 changed files with 13 additions and 2 deletions
13
lib/hostip.c
13
lib/hostip.c
|
|
@ -307,6 +307,9 @@ int Curl_resolv(struct connectdata *conn,
|
|||
|
||||
/* See if its already in our dns cache */
|
||||
dns = Curl_hash_pick(data->hostcache, entry_id, entry_len+1);
|
||||
|
||||
if(data->share)
|
||||
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||
|
||||
/* free the allocated entry_id again */
|
||||
free(entry_id);
|
||||
|
|
@ -332,12 +335,18 @@ int Curl_resolv(struct connectdata *conn,
|
|||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(data->share)
|
||||
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
|
||||
|
||||
/* we got a response, store it in the cache */
|
||||
dns = cache_resolv_response(data, addr, hostname, port);
|
||||
|
||||
if(data->share)
|
||||
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||
}
|
||||
}
|
||||
|
||||
if(data->share)
|
||||
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||
|
||||
*entry = dns;
|
||||
|
||||
|
|
|
|||
|
|
@ -68,6 +68,8 @@ unlock: share <Pigs in space>
|
|||
PERFORM
|
||||
lock: dns <Pigs in space>
|
||||
unlock: dns <Pigs in space>
|
||||
lock: dns <Pigs in space>
|
||||
unlock: dns <Pigs in space>
|
||||
lock: cookie <Pigs in space>
|
||||
unlock: cookie <Pigs in space>
|
||||
lock: cookie <Pigs in space>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue