summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJon Spencer <jon@jonspencer.ca>2014-11-14 10:32:47 -0800
committerDaniel Stenberg <daniel@haxx.se>2014-11-19 13:22:07 +0100
commit29336986772dd4262ca85e8ef0120d3cbdf10a23 (patch)
treee2b13448f24be4a9e70db33b38e15edb631da440 /lib
parentcf510ad7817d33a0d6730f39e05e277dc23a9966 (diff)
downloadcurl-29336986772dd4262ca85e8ef0120d3cbdf10a23.tar.gz
multi: inform about closed sockets before they are closed
When the connection code decides to close a socket it informs the multi system via the Curl_multi_closed function. The multi system may, in turn, invoke the CURLMOPT_SOCKETFUNCTION function with CURL_POLL_REMOVE. This happens after the socket has already been closed. Reorder the code so that CURL_POLL_REMOVE is called before the socket is closed.
Diffstat (limited to 'lib')
-rw-r--r--lib/connect.c3
-rw-r--r--lib/multi.c2
-rw-r--r--lib/multiif.h2
3 files changed, 4 insertions, 3 deletions
diff --git a/lib/connect.c b/lib/connect.c
index 5f64afab3..3be491895 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -1244,12 +1244,13 @@ int Curl_closesocket(struct connectdata *conn,
else
return conn->fclosesocket(conn->closesocket_client, sock);
}
- sclose(sock);
if(conn)
/* tell the multi-socket code about this */
Curl_multi_closed(conn, sock);
+ sclose(sock);
+
return 0;
}
diff --git a/lib/multi.c b/lib/multi.c
index 6313ba4ae..7ea366ca2 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -2115,7 +2115,7 @@ static void singlesocket(struct Curl_multi *multi,
* Curl_multi_closed()
*
* Used by the connect code to tell the multi_socket code that one of the
- * sockets we were using have just been closed. This function will then
+ * sockets we were using is about to be closed. This function will then
* remove it from the sockethash for this handle to make the multi_socket API
* behave properly, especially for the case when libcurl will create another
* socket again and it gets the same file descriptor number.
diff --git a/lib/multiif.h b/lib/multiif.h
index 19bdaf2a3..d8acfcabe 100644
--- a/lib/multiif.h
+++ b/lib/multiif.h
@@ -82,7 +82,7 @@ size_t Curl_multi_max_total_connections(struct Curl_multi *multi);
* Curl_multi_closed()
*
* Used by the connect code to tell the multi_socket code that one of the
- * sockets we were using have just been closed. This function will then
+ * sockets we were using is about to be closed. This function will then
* remove it from the sockethash for this handle to make the multi_socket API
* behave properly, especially for the case when libcurl will create another
* socket again and it gets the same file descriptor number.