summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2016-10-21 11:03:10 +0200
committerDaniel Stenberg <daniel@haxx.se>2016-10-22 16:10:57 +0200
commit6290c3c26bada49229d16ab465c8f964b5e9a868 (patch)
tree393d87ec8af229607f4088362cf8fce3f444872c
parent406506ca928eb7a787489e9670bc2da3506b2499 (diff)
downloadgnurl-6290c3c26bada49229d16ab465c8f964b5e9a868.tar.gz
gnurl-6290c3c26bada49229d16ab465c8f964b5e9a868.tar.bz2
gnurl-6290c3c26bada49229d16ab465c8f964b5e9a868.zip
multi: force connections to get closed in close_all_connections
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ć
-rw-r--r--lib/multi.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/multi.c b/lib/multi.c
index 9b1b574e3..2432b15d0 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -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);