fix: properly cleanup setTimeout when scheduler.wait gets aborted#6068
Merged
LuisDuarte1 merged 3 commits intomainfrom Feb 13, 2026
Merged
fix: properly cleanup setTimeout when scheduler.wait gets aborted#6068LuisDuarte1 merged 3 commits intomainfrom
scheduler.wait gets aborted#6068LuisDuarte1 merged 3 commits intomainfrom
Conversation
Even though `scheduler.wait` can be passed an `AbortSignal`, when this signal is actioned it doesn't seem to properly cleanup the setTimeout. This is most troubling when the aborted `scheduler.wait` has to wait for a good while, because that `setTimeout` slot will probably never be freed up. The repro test emulates 11k setTimeouts being aborted - and before that would fail with: ``` workerd/io/worker.c++:2324: info: uncaught exception; source = Uncaught (in promise); stack = QuotaExceededError: You have exceeded the number of active timeouts you may set. max active timeouts: 10000, current active timeouts: 10000, finished timeouts: 0 ``` And now it passes because it correctly cancels the setTimeout.
anonrig
reviewed
Feb 13, 2026
jasnell
reviewed
Feb 13, 2026
jasnell
approved these changes
Feb 13, 2026
Co-authored-by: James M Snell <jsnell@cloudflare.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Even though
scheduler.waitcan be passed anAbortSignal, when this signal is actioned it doesn't seem to properly cleanup the setTimeout. This is most troubling when the abortedscheduler.waithas to wait for a good while, because thatsetTimeoutslot will probably never be freed up.The repro test emulates 11k setTimeouts being aborted - and before that would fail with:
And now it passes because it correctly cancels the setTimeout.