diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/url.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -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 */ |