diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/http.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/http.c b/lib/http.c index f8ef9a4ea..266c1cacb 100644 --- a/lib/http.c +++ b/lib/http.c @@ -340,9 +340,13 @@ static CURLcode perhapsrewind(struct connectdata *conn) */ conn->bits.close = TRUE; data->req.size = 0; /* don't download any more than 0 bytes */ + + /* There still is data left to send, but this connection is marked for + closure so we can safely do the rewind right now */ } if(bytessent) + /* we rewind now at once since if we already sent something */ return Curl_readrewind(conn); return CURLE_OK; @@ -1606,10 +1610,20 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn, if(error) return CURLE_RECV_ERROR; - if(data->info.httpproxycode != 200) + if(data->info.httpproxycode != 200) { /* Deal with the possibly already received authenticate headers. 'newurl' is set to a new URL if we must loop. */ - Curl_http_auth_act(conn); + result = Curl_http_auth_act(conn); + if(result) + return result; + + if(conn->bits.close) + /* the connection has been marked for closure, most likely in the + Curl_http_auth_act() function and thus we can kill it at once + below + */ + closeConnection = TRUE; + } if(closeConnection && data->req.newurl) { /* Connection closed by server. Don't use it anymore */ |