aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/url.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/lib/url.c b/lib/url.c
index c6e19df02..201d35eeb 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -495,6 +495,10 @@ RETSIGTYPE alarmfunc(int signal)
CURLcode Curl_disconnect(struct connectdata *conn)
{
+ if(-1 != conn->connectindex)
+ /* unlink ourselves! */
+ conn->data->connects[conn->connectindex] = NULL;
+
if(conn->curl_disconnect)
/* This is set if protocol-specific cleanups should be made */
conn->curl_disconnect(conn);
@@ -1810,13 +1814,8 @@ CURLcode Curl_connect(struct UrlData *data,
/* We're not allowed to return failure with memory left allocated
in the connectdata struct, free those here */
conn = (struct connectdata *)*in_connect;
- if(conn) {
- int index;
- index = conn->connectindex; /* get the index */
+ if(conn)
Curl_disconnect(conn); /* close the connection */
- if(-1 != index)
- data->connects[index]=NULL; /* clear the pointer */
- }
}
return code;
}
@@ -1824,11 +1823,8 @@ CURLcode Curl_connect(struct UrlData *data,
CURLcode Curl_done(struct connectdata *conn)
{
- struct UrlData *data;
+ struct UrlData *data=conn->data;
CURLcode result;
- int index;
-
- data = conn->data;
/* this calls the protocol-specific function pointer previously set */
if(conn->curl_done)
@@ -1840,11 +1836,8 @@ CURLcode Curl_done(struct connectdata *conn)
/* if bits.close is TRUE, it means that the connection should be closed
in spite of all our efforts to be nice */
- if((CURLE_OK == result) && conn->bits.close) {
- index = conn->connectindex; /* get the index */
+ if((CURLE_OK == result) && conn->bits.close)
result = Curl_disconnect(conn); /* close the connection */
- data->connects[index]=NULL; /* clear the pointer */
- }
return result;
}