New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
multi: mandate use "expire ID" for timers #1472
Conversation
@bagder, thanks for your PR! By analyzing the history of the files in this pull request, we identified @tatsuhiro-t, @yangtse and @dfandrich to be potential reviewers. |
A) reduces the timeout lists drastically B) prevents a lot of superfluous loops for timers that expires "in vain" when it has actually already been extended to fire later on
... since the total amount is low this is faster, easier and reduces memory overhead. Also, Curl_expire_done() can now mark an expire timeout as done so that it never times out.
Hello there, I have a question about this change. I have only dug into the code a little, so this could be a silly question. The timers all now have IDs, so you now have a fixed set of timer "categories". If we need to test for something (eg speedtest), the code calls In code... something like... hmm... make up a scenario....
I suggest that Curl_expire_latest become simply Curl_expire(id), and always adjust the timer. Without digging into the code any more, I would guess that this will not affect performance, because (in my scenario) task1 and task2 are going to be called no matter what timer goes off (my assumption at the top). Thoughts? |
Thanks a lot for your valuable thoughts and feedback. Yes I can totally see how you're right and that this change sort of "broke" Curl_expire_latest() for exactly the reasons you state. I intend to proceed as you suggest and replace Curl_expire_latest() with plain Curl_expire()... Thanks again. I'll follow up with a separate PR. |
Curl_expire_latest() removal in PR #1555 |
Thanks |
[internals only, no user-visible change]
This allows us to remove running timers without having them expire "in vain". It makes the typical list of "running timers" much shorter (now usually just 0-2 entries, from previously when it could easily grow to 6-10). It then also allows us to use a fixed array of possible timers so we can do them without using malloc.