Skip to content

Only refuse to resume fibers suspended by a transfer - #9765

Merged
headius merged 1 commit into
jruby:masterfrom
sampokuokkanen:fiber-resume-after-transfer
Oct 2, 2026
Merged

headius merged 1 commit into
jruby:masterfrom
sampokuokkanen:fiber-resume-after-transfer

Conversation

@sampokuokkanen

Copy link
Copy Markdown
Contributor

A fiber that had ever been transferred into could never be resumed again. The fiber scheduler transfers an Enumerator's fiber away and back when it sleeps, so the next Enumerator#next raised "attempt to resume a transferring fiber", which broke Async's enumerator tests.

Follow MRI's fiber_resume_kw: refuse only a started fiber that isn't parked in Fiber.yield.

This test from Async now passes: https://github.com/socketry/async/blob/d8f59c95c3083558aa543101ee5fdcc006054f4d/test/enumerator.rb#L46-L51

A fiber that had ever been transferred into could never be resumed
again. The fiber scheduler transfers an Enumerator's fiber away and
back when it sleeps, so the next Enumerator#next raised "attempt to
resume a transferring fiber", which broke Async's enumerator tests.

Follow MRI's fiber_resume_kw: refuse only a started fiber that isn't
parked in Fiber.yield.
@headius headius added this to the JRuby 10.1.3.0 milestone Oct 2, 2026
@headius

headius commented Oct 2, 2026

Copy link
Copy Markdown
Member

Yup makes sense.

@headius
headius merged commit 38bb100 into jruby:master Oct 2, 2026
241 of 242 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants