Add thread polling on backedges of Range#each loop #7283
Merged
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.
There are several forms of loops here but none had any explicit
thread polling, which led to #7279 and timeout events not firing
during trivial Range#each loops. This commit adds polling to all
loops reachable from Range#each, which fixees #7279 and other
untested cases.
This does, however, come with a performance hit; the related thread
state must be checked after each loop. These could be improved in
the future by using a safe point mechanism like SwitchPoint, or by
porting these functions to Ruby which gets backedge thread polling
via the IR.
Fixes #7279