From: Daniel Stenberg Date: Thu, 30 Nov 2023 09:32:16 +0000 (+0100) Subject: multi: during ratelimit multi_getsock should return no sockets X-Git-Tag: curl-8_5_0~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d1c2bb3d8d9c68395de815b8217ffb7d2dc795c5;p=thirdparty%2Fcurl.git multi: during ratelimit multi_getsock should return no sockets ... as there is nothing to wait for then, it just waits. Otherwise, this causes much more CPU work and updates than necessary during ratelimit periods. Ref: https://curl.se/mail/lib-2023-11/0056.html Closes #12430 --- diff --git a/lib/multi.c b/lib/multi.c index e62f237693..5456113be7 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1064,6 +1064,10 @@ static void multi_getsock(struct Curl_easy *data, case MSTATE_PERFORMING: Curl_pollset_add_socks(data, ps, Curl_single_getsock); break; + + case MSTATE_RATELIMITING: + /* nothing to wait for */ + return; } /* Let connection filters add/remove as needed */ diff --git a/lib/progress.c b/lib/progress.c index b0fc4aa48f..e96cbf7af4 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -304,7 +304,7 @@ timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize, * 'actual' is the time in milliseconds it took to actually download the * last 'size' bytes. */ - actual = Curl_timediff(now, start); + actual = Curl_timediff_ceil(now, start); if(actual < minimum) { /* if it downloaded the data faster than the limit, make it wait the difference */