Actions
Bug #20723
open`IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
Description
The following program seems to work okay on Ruby 3.2 but hangs on Ruby 3.3:
#!/usr/bin/env ruby
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'async'
end
require 'socket'
def close_while_reading(io)
thread = Thread.new do
Thread.current.report_on_exception = false
io.wait_readable
end
# Wait until the thread is blocked on read:
Thread.pass until thread.status == "sleep"
Async do
io.close
end
thread.join
end
begin
client, server = Socket.pair(:UNIX, :STREAM)
close_while_reading(client)
rescue => error
$stderr.puts error.full_message
end
Updated by ioquatix (Samuel Williams) about 6 hours ago
It may be related to https://github.com/ruby/ruby/commit/66871c5a06d723f8350935ced1e88d8cc929d809
Updated by ioquatix (Samuel Williams) about 5 hours ago
I've added the following work-around: https://github.com/socketry/io-stream/commit/7d1546fa829d3fe046f66f559d9a774497390f3e
Actions
Like0
Like0Like0