From a2bbc3ac8c5498a42a50d831cb59078e05f3f1d7 Mon Sep 17 00:00:00 2001 From: ejanchivdorj Date: Tue, 9 Mar 2021 13:23:43 -0800 Subject: [PATCH] multi: update pending list when removing handle when removing a handle, most of the lists are updated but pending list is not updated. Updating now. Closes #6713 --- lib/multi.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/multi.c b/lib/multi.c index d3b670c314..f5bacc17cb 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -824,6 +824,17 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi, } } + /* Remove from the pending list if it is there. Otherwise this will + remain on the pending list forever due to the state change. */ + for(e = multi->pending.head; e; e = e->next) { + struct Curl_easy *curr_data = e->ptr; + + if(curr_data == data) { + Curl_llist_remove(&multi->pending, e, NULL); + break; + } + } + /* make the previous node point to our next */ if(data->prev) data->prev->next = data->next; @@ -840,6 +851,8 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi, We do not touch the easy handle here! */ multi->num_easy--; /* one less to care about now */ + process_pending_handles(multi); + Curl_update_timer(multi); return CURLM_OK; } -- 2.47.3