From: ejanchivdorj Date: Tue, 9 Mar 2021 21:23:43 +0000 (-0800) Subject: multi: update pending list when removing handle X-Git-Tag: curl-7_76_0~88 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a2bbc3ac8c5498a42a50d831cb59078e05f3f1d7;p=thirdparty%2Fcurl.git 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 --- 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; }