Project

General

Profile

Actions

Bug #20723

closed

`IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.

Added by ioquatix (Samuel Williams) 2 months ago. Updated 20 days ago.

Status:
Closed
Target version:
-
ruby -v:
Backport:
[ruby-core:119124]

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
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0