aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-02-17 23:51:43 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-02-18 23:01:55 +0100
commitd85cae922575d8966529fee364e6d611e3062a99 (patch)
tree3b3e28ced7d845909fd11178992e61d29ea8db90 /lib
parent05895927f59eef2d746a1b70f40f1abd0907a474 (diff)
multi: better failed connect treatment
When failing to connect the protocol during the CURLM_STATE_PROTOCONNECT state, Curl_done() has to be called with the premature flag set TRUE as for the pingpong protocols this can be important. When Curl_done() is called with premature == TRUE, it needs to call Curl_disconnect() with its 'dead_connection' argument set to TRUE as well so that any protocol handler's disconnect function won't attempt to use the (control) connection for anything. This problem caused the pingpong protocols to fail to disconnect when STARTTLS failed. Reported by: Alona Rossen Bug: http://curl.haxx.se/mail/lib-2011-02/0195.html
Diffstat (limited to 'lib')
-rw-r--r--lib/multi.c2
-rw-r--r--lib/url.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/lib/multi.c b/lib/multi.c
index 122f66b40..31127028d 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -1189,7 +1189,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
else if(easy->result) {
/* failure detected */
Curl_posttransfer(data);
- Curl_done(&easy->easy_conn, easy->result, FALSE);
+ Curl_done(&easy->easy_conn, easy->result, TRUE);
disconnect_conn = TRUE;
}
break;
diff --git a/lib/url.c b/lib/url.c
index c07554182..c1dab8254 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -5281,7 +5281,7 @@ CURLcode Curl_done(struct connectdata **connp,
*/
if(data->set.reuse_forbid || conn->bits.close || premature ||
(-1 == conn->connectindex)) {
- CURLcode res2 = Curl_disconnect(conn, FALSE); /* close the connection */
+ CURLcode res2 = Curl_disconnect(conn, premature); /* close the connection */
/* If we had an error already, make sure we return that one. But
if we got a new error, return that. */