From 29336986772dd4262ca85e8ef0120d3cbdf10a23 Mon Sep 17 00:00:00 2001 From: Jon Spencer Date: Fri, 14 Nov 2014 10:32:47 -0800 Subject: 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. --- lib/connect.c | 3 ++- lib/multi.c | 2 +- lib/multiif.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) (limited to 'lib') 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. -- cgit v1.2.3