mirror of
https://github.com/curl/curl.git
synced 2025-01-18 14:04:30 +08:00
Made the dns entry remain locked while a connection to the host remains to
allow verbose output during this period. Bertrand Demiddelaer reported and helped fixing.
This commit is contained in:
parent
2ee6c33412
commit
95def48071
@ -391,11 +391,6 @@ void curl_easy_cleanup(CURL *curl)
|
||||
if(!data)
|
||||
return;
|
||||
|
||||
if ( ! (data->share && data->share->hostcache) ) {
|
||||
if ( !Curl_global_host_cache_use(data)) {
|
||||
Curl_hash_destroy(data->hostcache);
|
||||
}
|
||||
}
|
||||
Curl_close(data);
|
||||
}
|
||||
|
||||
|
@ -263,8 +263,9 @@ void Curl_hostcache_prune(struct SessionHandle *data)
|
||||
{
|
||||
time_t now;
|
||||
|
||||
if(data->set.dns_cache_timeout == -1)
|
||||
/* cache forever means never prune! */
|
||||
if((data->set.dns_cache_timeout == -1) || !data->hostcache)
|
||||
/* cache forever means never prune, and NULL hostcache means
|
||||
we can't do it */
|
||||
return;
|
||||
|
||||
if(data->share)
|
||||
@ -459,7 +460,11 @@ int Curl_resolv(struct connectdata *conn,
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(data->share)
|
||||
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
|
||||
dns->inuse++; /* we use it! */
|
||||
if(data->share)
|
||||
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
|
||||
rc = CURLRESOLV_RESOLVED;
|
||||
}
|
||||
|
||||
|
31
lib/url.c
31
lib/url.c
@ -204,6 +204,12 @@ CURLcode Curl_close(struct SessionHandle *data)
|
||||
/* Loop through all open connections and kill them one by one */
|
||||
while(-1 != ConnectionKillOne(data));
|
||||
|
||||
if ( ! (data->share && data->share->hostcache) ) {
|
||||
if ( !Curl_global_host_cache_use(data)) {
|
||||
Curl_hash_destroy(data->hostcache);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_SSLEAY
|
||||
/* Close down all open SSL info and sessions */
|
||||
Curl_SSL_Close_All(data);
|
||||
@ -1432,6 +1438,17 @@ CURLcode Curl_disconnect(struct connectdata *conn)
|
||||
|
||||
data = conn->data;
|
||||
|
||||
if(conn->dns_entry)
|
||||
Curl_resolv_unlock(data, conn->dns_entry); /* done with this */
|
||||
|
||||
#if defined(CURLDEBUG) && defined(AGGRESIVE_TEST)
|
||||
/* scan for DNS cache entries still marked as in use */
|
||||
Curl_hash_apply(data->hostcache,
|
||||
NULL, Curl_scan_cache_used);
|
||||
#endif
|
||||
|
||||
Curl_hostcache_prune(data); /* kill old DNS cache entries */
|
||||
|
||||
/*
|
||||
* The range string is usually freed in curl_done(), but we might
|
||||
* get here *instead* if we fail prematurely. Thus we need to be able
|
||||
@ -3230,8 +3247,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
||||
if(conn->bits.reuse) {
|
||||
/* re-used connection, no resolving is necessary */
|
||||
hostaddr = NULL;
|
||||
conn->dns_entry = NULL; /* we don't connect now so we don't have any fresh
|
||||
dns entry struct to point to */
|
||||
/* we'll need to clear conn->dns_entry later in Curl_disconnect() */
|
||||
|
||||
if (conn->bits.httpproxy)
|
||||
fix_hostname(conn, &conn->host);
|
||||
@ -3480,17 +3496,6 @@ CURLcode Curl_done(struct connectdata **connp,
|
||||
conn->newurl = NULL;
|
||||
}
|
||||
|
||||
if(conn->dns_entry)
|
||||
Curl_resolv_unlock(conn->data, conn->dns_entry); /* done with this */
|
||||
|
||||
#if defined(CURLDEBUG) && defined(AGGRESIVE_TEST)
|
||||
/* scan for DNS cache entries still marked as in use */
|
||||
Curl_hash_apply(data->hostcache,
|
||||
NULL, Curl_scan_cache_used);
|
||||
#endif
|
||||
|
||||
Curl_hostcache_prune(data); /* kill old DNS cache entries */
|
||||
|
||||
/* this calls the protocol-specific function pointer previously set */
|
||||
if(conn->curl_done)
|
||||
result = conn->curl_done(conn, status);
|
||||
|
@ -79,11 +79,11 @@ unlock: cookie <Pigs in space>: 11
|
||||
lock: cookie <Pigs in space>: 12
|
||||
unlock: cookie <Pigs in space>: 13
|
||||
run 1: set cookie 1, 2 and 3
|
||||
CLEANUP
|
||||
lock: dns <Pigs in space>: 14
|
||||
unlock: dns <Pigs in space>: 15
|
||||
lock: dns <Pigs in space>: 16
|
||||
unlock: dns <Pigs in space>: 17
|
||||
CLEANUP
|
||||
lock: cookie <Pigs in space>: 18
|
||||
unlock: cookie <Pigs in space>: 19
|
||||
*** run 2
|
||||
@ -93,49 +93,53 @@ unlock: share <Pigs in space>: 21
|
||||
PERFORM
|
||||
lock: dns <Pigs in space>: 22
|
||||
unlock: dns <Pigs in space>: 23
|
||||
lock: cookie <Pigs in space>: 24
|
||||
unlock: cookie <Pigs in space>: 25
|
||||
lock: dns <Pigs in space>: 24
|
||||
unlock: dns <Pigs in space>: 25
|
||||
lock: cookie <Pigs in space>: 26
|
||||
unlock: cookie <Pigs in space>: 27
|
||||
lock: cookie <Pigs in space>: 28
|
||||
unlock: cookie <Pigs in space>: 29
|
||||
lock: cookie <Pigs in space>: 30
|
||||
unlock: cookie <Pigs in space>: 31
|
||||
run 2: set cookie 4 and 5
|
||||
lock: dns <Pigs in space>: 30
|
||||
unlock: dns <Pigs in space>: 31
|
||||
CLEANUP
|
||||
lock: dns <Pigs in space>: 32
|
||||
unlock: dns <Pigs in space>: 33
|
||||
CLEANUP
|
||||
lock: cookie <Pigs in space>: 34
|
||||
unlock: cookie <Pigs in space>: 35
|
||||
lock: dns <Pigs in space>: 34
|
||||
unlock: dns <Pigs in space>: 35
|
||||
lock: cookie <Pigs in space>: 36
|
||||
unlock: cookie <Pigs in space>: 37
|
||||
*** run 3
|
||||
CURLOPT_SHARE
|
||||
lock: share <Pigs in space>: 36
|
||||
unlock: share <Pigs in space>: 37
|
||||
lock: share <Pigs in space>: 38
|
||||
unlock: share <Pigs in space>: 39
|
||||
CURLOPT_COOKIEJAR
|
||||
PERFORM
|
||||
lock: dns <Pigs in space>: 38
|
||||
unlock: dns <Pigs in space>: 39
|
||||
lock: cookie <Pigs in space>: 40
|
||||
unlock: cookie <Pigs in space>: 41
|
||||
lock: cookie <Pigs in space>: 42
|
||||
unlock: cookie <Pigs in space>: 43
|
||||
lock: dns <Pigs in space>: 40
|
||||
unlock: dns <Pigs in space>: 41
|
||||
lock: dns <Pigs in space>: 42
|
||||
unlock: dns <Pigs in space>: 43
|
||||
lock: cookie <Pigs in space>: 44
|
||||
unlock: cookie <Pigs in space>: 45
|
||||
lock: cookie <Pigs in space>: 46
|
||||
unlock: cookie <Pigs in space>: 47
|
||||
lock: cookie <Pigs in space>: 48
|
||||
unlock: cookie <Pigs in space>: 49
|
||||
run 3: overwrite cookie 1 and 4
|
||||
lock: dns <Pigs in space>: 46
|
||||
unlock: dns <Pigs in space>: 47
|
||||
lock: dns <Pigs in space>: 48
|
||||
unlock: dns <Pigs in space>: 49
|
||||
try SHARE_CLEANUP...
|
||||
lock: share <Pigs in space>: 50
|
||||
unlock: share <Pigs in space>: 51
|
||||
SHARE_CLEANUP failed, correct
|
||||
CLEANUP
|
||||
lock: cookie <Pigs in space>: 52
|
||||
unlock: cookie <Pigs in space>: 53
|
||||
lock: dns <Pigs in space>: 52
|
||||
unlock: dns <Pigs in space>: 53
|
||||
lock: dns <Pigs in space>: 54
|
||||
unlock: dns <Pigs in space>: 55
|
||||
lock: cookie <Pigs in space>: 56
|
||||
unlock: cookie <Pigs in space>: 57
|
||||
SHARE_CLEANUP
|
||||
lock: share <Pigs in space>: 54
|
||||
unlock: share <Pigs in space>: 55
|
||||
lock: share <Pigs in space>: 58
|
||||
unlock: share <Pigs in space>: 59
|
||||
GLOBAL_CLEANUP
|
||||
</stdout>
|
||||
<stderr>
|
||||
|
Loading…
Reference in New Issue
Block a user