mirror of
https://github.com/curl/curl.git
synced 2026-07-28 16:53:11 +03:00
- Phil Lisiecki filed bug report #2413067
(http://curl.haxx.se/bug/view.cgi?id=2413067) that identified a problem that would cause libcurl to mark a DNS cache entry "in use" eternally if the subsequence TCP connect failed. It would thus never get pruned and refreshed as it should've been.
This commit is contained in:
parent
9aea3e265d
commit
83640b2ee5
4 changed files with 23 additions and 8 deletions
16
lib/url.c
16
lib/url.c
|
|
@ -4523,22 +4523,28 @@ CURLcode Curl_connect(struct SessionHandle *data,
|
|||
|
||||
if(CURLE_OK == code) {
|
||||
/* no error */
|
||||
if((*in_connect)->send_pipe->size +
|
||||
(*in_connect)->recv_pipe->size != 0)
|
||||
if((*in_connect)->send_pipe->size || (*in_connect)->recv_pipe->size)
|
||||
/* pipelining */
|
||||
*protocol_done = TRUE;
|
||||
else {
|
||||
|
||||
if(dns || !*asyncp)
|
||||
/* If an address is available it means that we already have the name
|
||||
resolved, OR it isn't async. if this is a re-used connection 'dns'
|
||||
will be NULL here. Continue connecting from here */
|
||||
code = setup_conn(*in_connect, dns, protocol_done);
|
||||
/* else
|
||||
response will be received and treated async wise */
|
||||
|
||||
if(dns && code) {
|
||||
/* We have the dns entry info already but failed to connect to the
|
||||
* host and thus we must make sure to unlock the dns entry again
|
||||
* before returning failure from here.
|
||||
*/
|
||||
Curl_resolv_unlock(data, dns);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(CURLE_OK != code && *in_connect) {
|
||||
if(code && *in_connect) {
|
||||
/* We're not allowed to return failure with memory left allocated
|
||||
in the connectdata struct, free those here */
|
||||
Curl_disconnect(*in_connect); /* close the connection */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue