diff options
author | Daniel Stenberg <daniel@haxx.se> | 2016-10-21 11:03:10 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2016-10-22 16:10:57 +0200 |
commit | 6290c3c26bada49229d16ab465c8f964b5e9a868 (patch) | |
tree | 393d87ec8af229607f4088362cf8fce3f444872c /lib | |
parent | 406506ca928eb7a787489e9670bc2da3506b2499 (diff) | |
download | curl-6290c3c26bada49229d16ab465c8f964b5e9a868.tar.gz |
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ć
Diffstat (limited to 'lib')
-rw-r--r-- | lib/multi.c | 2 |
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); |