* [ruby-core:119124] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
@ 2024-09-11 9:42 ioquatix (Samuel Williams) via ruby-core
2024-09-11 9:44 ` [ruby-core:119125] " ioquatix (Samuel Williams) via ruby-core
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: ioquatix (Samuel Williams) via ruby-core @ 2024-09-11 9:42 UTC (permalink / raw)
To: ruby-core; +Cc: ioquatix (Samuel Williams)
Issue #20723 has been reported by ioquatix (Samuel Williams).
----------------------------------------
Bug #20723: `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
https://bugs.ruby-lang.org/issues/20723
* Author: ioquatix (Samuel Williams)
* Status: Open
* Assignee: kjtsanaktsidis (KJ Tsanaktsidis)
* Backport: 3.3: REQUIRED
----------------------------------------
The following program seems to work okay on Ruby 3.2 but hangs on Ruby 3.3:
```ruby
#!/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
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:119125] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
2024-09-11 9:42 [ruby-core:119124] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler ioquatix (Samuel Williams) via ruby-core
@ 2024-09-11 9:44 ` ioquatix (Samuel Williams) via ruby-core
2024-09-11 10:49 ` [ruby-core:119126] " ioquatix (Samuel Williams) via ruby-core
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: ioquatix (Samuel Williams) via ruby-core @ 2024-09-11 9:44 UTC (permalink / raw)
To: ruby-core; +Cc: ioquatix (Samuel Williams)
Issue #20723 has been updated by ioquatix (Samuel Williams).
It may be related to https://github.com/ruby/ruby/commit/66871c5a06d723f8350935ced1e88d8cc929d809
----------------------------------------
Bug #20723: `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
https://bugs.ruby-lang.org/issues/20723#change-109718
* Author: ioquatix (Samuel Williams)
* Status: Open
* Assignee: kjtsanaktsidis (KJ Tsanaktsidis)
* Backport: 3.3: REQUIRED
----------------------------------------
The following program seems to work okay on Ruby 3.2 but hangs on Ruby 3.3:
```ruby
#!/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
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:119126] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
2024-09-11 9:42 [ruby-core:119124] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler ioquatix (Samuel Williams) via ruby-core
2024-09-11 9:44 ` [ruby-core:119125] " ioquatix (Samuel Williams) via ruby-core
@ 2024-09-11 10:49 ` ioquatix (Samuel Williams) via ruby-core
2024-09-13 7:45 ` [ruby-core:119169] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: ioquatix (Samuel Williams) via ruby-core @ 2024-09-11 10:49 UTC (permalink / raw)
To: ruby-core; +Cc: ioquatix (Samuel Williams)
Issue #20723 has been updated by ioquatix (Samuel Williams).
I've added the following work-around: <https://github.com/socketry/io-stream/commit/7d1546fa829d3fe046f66f559d9a774497390f3e>
----------------------------------------
Bug #20723: `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
https://bugs.ruby-lang.org/issues/20723#change-109719
* Author: ioquatix (Samuel Williams)
* Status: Open
* Assignee: kjtsanaktsidis (KJ Tsanaktsidis)
* Backport: 3.3: REQUIRED
----------------------------------------
The following program seems to work okay on Ruby 3.2 but hangs on Ruby 3.3:
```ruby
#!/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
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:119169] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
2024-09-11 9:42 [ruby-core:119124] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler ioquatix (Samuel Williams) via ruby-core
2024-09-11 9:44 ` [ruby-core:119125] " ioquatix (Samuel Williams) via ruby-core
2024-09-11 10:49 ` [ruby-core:119126] " ioquatix (Samuel Williams) via ruby-core
@ 2024-09-13 7:45 ` kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2024-09-23 0:29 ` [ruby-core:119279] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2024-11-04 22:23 ` [ruby-core:119704] " k0kubun (Takashi Kokubun) via ruby-core
4 siblings, 0 replies; 6+ messages in thread
From: kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core @ 2024-09-13 7:45 UTC (permalink / raw)
To: ruby-core; +Cc: kjtsanaktsidis (KJ Tsanaktsidis)
Issue #20723 has been updated by kjtsanaktsidis (KJ Tsanaktsidis).
Sorry about this. I think https://github.com/ruby/ruby/pull/11614 is the smallest diff that will fix the issue (and this should probably be backported to 3.3).
Separately to that, I wonder if we need to wrap up some common function for "wake up this fiber, either with the fiber scheduler or with the thread directly". We've implemented this logic in a number of places... but let's keep that refactor out of the fix PR (since it shouldn't be backported).
----------------------------------------
Bug #20723: `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
https://bugs.ruby-lang.org/issues/20723#change-109747
* Author: ioquatix (Samuel Williams)
* Status: Open
* Assignee: kjtsanaktsidis (KJ Tsanaktsidis)
* Backport: 3.3: REQUIRED
----------------------------------------
The following program seems to work okay on Ruby 3.2 but hangs on Ruby 3.3:
```ruby
#!/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
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:119279] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
2024-09-11 9:42 [ruby-core:119124] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler ioquatix (Samuel Williams) via ruby-core
` (2 preceding siblings ...)
2024-09-13 7:45 ` [ruby-core:119169] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
@ 2024-09-23 0:29 ` kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2024-11-04 22:23 ` [ruby-core:119704] " k0kubun (Takashi Kokubun) via ruby-core
4 siblings, 0 replies; 6+ messages in thread
From: kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core @ 2024-09-23 0:29 UTC (permalink / raw)
To: ruby-core; +Cc: kjtsanaktsidis (KJ Tsanaktsidis)
Issue #20723 has been updated by kjtsanaktsidis (KJ Tsanaktsidis).
Backport PR for 3.3 - https://github.com/ruby/ruby/pull/11664
No backport for 3.2 is required because this locking around close didn't exist there.
----------------------------------------
Bug #20723: `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
https://bugs.ruby-lang.org/issues/20723#change-109887
* Author: ioquatix (Samuel Williams)
* Status: Closed
* Assignee: kjtsanaktsidis (KJ Tsanaktsidis)
* Backport: 3.3: REQUIRED
----------------------------------------
The following program seems to work okay on Ruby 3.2 but hangs on Ruby 3.3:
```ruby
#!/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
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:119704] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
2024-09-11 9:42 [ruby-core:119124] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler ioquatix (Samuel Williams) via ruby-core
` (3 preceding siblings ...)
2024-09-23 0:29 ` [ruby-core:119279] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
@ 2024-11-04 22:23 ` k0kubun (Takashi Kokubun) via ruby-core
4 siblings, 0 replies; 6+ messages in thread
From: k0kubun (Takashi Kokubun) via ruby-core @ 2024-11-04 22:23 UTC (permalink / raw)
To: ruby-core; +Cc: k0kubun (Takashi Kokubun)
Issue #20723 has been updated by k0kubun (Takashi Kokubun).
Backport changed from 3.3: REQUIRED to 3.3: DONE
ruby_3_3 commit:5b6009870dff883a8e71a05e60f175cea1d00d55.
----------------------------------------
Bug #20723: `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler.
https://bugs.ruby-lang.org/issues/20723#change-110367
* Author: ioquatix (Samuel Williams)
* Status: Closed
* Assignee: kjtsanaktsidis (KJ Tsanaktsidis)
* Backport: 3.3: DONE
----------------------------------------
The following program seems to work okay on Ruby 3.2 but hangs on Ruby 3.3:
```ruby
#!/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
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-11-04 22:24 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-09-11 9:42 [ruby-core:119124] [Ruby master Bug#20723] `IO#close` is broken on Ruby 3.3+ when using the Fiber scheduler ioquatix (Samuel Williams) via ruby-core
2024-09-11 9:44 ` [ruby-core:119125] " ioquatix (Samuel Williams) via ruby-core
2024-09-11 10:49 ` [ruby-core:119126] " ioquatix (Samuel Williams) via ruby-core
2024-09-13 7:45 ` [ruby-core:119169] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2024-09-23 0:29 ` [ruby-core:119279] " kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core
2024-11-04 22:23 ` [ruby-core:119704] " k0kubun (Takashi Kokubun) via ruby-core
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).