]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
multi: force connections to get closed in close_all_connections
authorDaniel Stenberg <daniel@haxx.se>
Fri, 21 Oct 2016 09:03:10 +0000 (11:03 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 22 Oct 2016 14:10:57 +0000 (16:10 +0200)
Several independent reports on infinite loops hanging in the
close_all_connections() function when closing a multi handle, can be
fixed by first marking the connection to get closed before calling
Curl_disconnect.

This is more fixing-the-symptom rather than the underlying problem
though.

Bug: https://curl.haxx.se/mail/lib-2016-10/0011.html
Bug: https://curl.haxx.se/mail/lib-2016-10/0059.html

Reported-by: Dan Fandrich, Valentin David, Miloš Ljumović
lib/multi.c

index 9b1b574e39d132812620791154c681e28d34baff..2432b15d04fd7db96eb708bf3bd0554b2df0351e 100644 (file)
@@ -42,6 +42,7 @@
 #include "multihandle.h"
 #include "pipeline.h"
 #include "sigpipe.h"
+#include "connect.h"
 /* The last 3 #include files should be in this order */
 #include "curl_printf.h"
 #include "curl_memory.h"
@@ -2177,6 +2178,7 @@ static void close_all_connections(struct Curl_multi *multi)
     conn->data->easy_conn = NULL; /* clear the easy handle's connection
                                      pointer */
     /* This will remove the connection from the cache */
+    connclose(conn, "kill all");
     (void)Curl_disconnect(conn, FALSE);
     sigpipe_restore(&pipe_st);