diff options
-rw-r--r-- | lib/transfer.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/transfer.c b/lib/transfer.c index 6e0b9e6c7..893897b05 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -1188,12 +1188,20 @@ CURLcode Curl_perform(struct SessionHandle *data) * may be free()ed in the Curl_done() function. */ newurl = conn->newurl?strdup(conn->newurl):NULL; - else + else { /* The transfer phase returned error, we mark the connection to get * closed to prevent being re-used. This is becasue we can't * possibly know if the connection is in a good shape or not now. */ conn->bits.close = TRUE; + if(-1 !=conn->secondarysocket) { + /* if we failed anywhere, we must clean up the secondary socket if + it was used */ + sclose(conn->secondarysocket); + conn->secondarysocket=-1; + } + } + /* Always run Curl_done(), even if some of the previous calls failed, but return the previous (original) error code */ res2 = Curl_done(conn); @@ -1414,13 +1422,6 @@ CURLcode Curl_perform(struct SessionHandle *data) if(!res && res2) res = res2; - if(conn && (-1 !=conn->secondarysocket)) { - /* if we failed anywhere, we must clean up the secondary socket if it - was used */ - sclose(conn->secondarysocket); - conn->secondarysocket=-1; - } - return res; } |