mirror of
https://github.com/curl/curl.git
synced 2026-07-28 18:13:06 +03:00
multi: start the loop over when handles are removed
Since more than one handle can be removed in a single call to multi_runsingle(), we cannot easily continue on the next node when a node has been removed since that node migth ALSO have been removed. Reported-by: Philippe Antoine Closes #16588
This commit is contained in:
parent
a7fda9a8f4
commit
a66ede5309
1 changed files with 7 additions and 0 deletions
|
|
@ -2601,6 +2601,7 @@ CURLMcode curl_multi_perform(CURLM *m, int *running_handles)
|
|||
for(e = Curl_llist_head(&multi->process); e; e = n) {
|
||||
struct Curl_easy *data = Curl_node_elem(e);
|
||||
CURLMcode result;
|
||||
unsigned int num_alive = multi->num_alive;
|
||||
/* Do the loop and only alter the signal ignore state if the next handle
|
||||
has a different NO_SIGNAL state than the previous */
|
||||
if(first) {
|
||||
|
|
@ -2619,6 +2620,12 @@ CURLMcode curl_multi_perform(CURLM *m, int *running_handles)
|
|||
if(result)
|
||||
returncode = result;
|
||||
}
|
||||
if(num_alive != multi->num_alive)
|
||||
/* Since more than one handle can be removed in a single call to
|
||||
multi_runsingle(), we cannot easily continue on the next node when a
|
||||
node has been removed since that node might ALSO have been
|
||||
removed. */
|
||||
n = Curl_llist_head(&multi->process);
|
||||
}
|
||||
|
||||
sigpipe_apply(multi->admin, &pipe_st);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue