Introduce Fiber::Scheduler#fiber_interrupt
.
#12585
Closed
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.
Ruby's
IO#close
can causeIO#read
,IO#write
,IO#wait
,IO#wait_readable
andIO#wait_writable
to be interrupted with an IOError (stream closed on another thread).The fiber scheduler did not implement this for
io_read
,io_write
andio_wait
hooks. Finally after several years, someone made a bug report - see socketry/async#368 for background. In order to solve this problem for the fiber scheduler, we need to expose the ability forIO#close
to interrupt a fiber.This PR introduces a new public C function
rb_io_interruptable_operation
which takes a callback. During that callback, the code may be interrupted. In addition, we expose that asIO#interruptable_operation{...}
which does the same. This allows us to implement IO interruption, e.g.See socketry/io-event#130 for the counterpart PR in the
io-event
gem, e.g. the user code which adopts this feature.