This is an extension to the fix in 7d80ed64e43515. We may call Curl_disconnect() while cleaning up the multi handle, which could lead to openssl sending packets, which could get a SIGPIPE. Signed-off-by: Jeff King <peff@xxxxxxxx> --- I really am just cargo-culting here. I have no idea what multi->closure_handle does, except that it gets used as conn->data for the connection we pass to Curl_disconnect, so it seems like a reasonable place to check for the magic no_signal variable. lib/multi.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/multi.c b/lib/multi.c index 923e2ce..2ecb1a4 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -41,6 +41,7 @@ #include "bundles.h" #include "multihandle.h" #include "pipeline.h" +#include "sigpipe.h" #define _MPRINTF_REPLACE /* use our functions only */ #include <curl/mprintf.h> @@ -1786,12 +1787,18 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle) struct SessionHandle *nextdata; if(GOOD_MULTI_HANDLE(multi)) { + SIGPIPE_VARIABLE(pipe); + bool restore_pipe = FALSE; + multi->type = 0; /* not good anymore */ /* Close all the connections in the connection cache */ close_all_connections(multi); if(multi->closure_handle) { + sigpipe_ignore(multi->closure_handle, &pipe); + restore_pipe = TRUE; + multi->closure_handle->dns.hostcache = multi->hostcache; Curl_hostcache_clean(multi->closure_handle, multi->closure_handle->dns.hostcache); @@ -1836,6 +1843,8 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle) Curl_pipeline_set_server_blacklist(NULL, &multi->pipelining_server_bl); free(multi); + if (restore_pipe) + sigpipe_restore(&pipe); return CURLM_OK; } -- 1.8.5.rc3.491.ge1614cf -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html