Bug #17477
closedRactor and pp incompatibility
Description
r = Ractor.new do
pp("foobar")
end
Ractor.select(r)
fails with:
#<Thread:0x00007f973414a050 run> terminated with exception (report_on_exception is true):
<internal:/opt/rubies/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:164:in `ensure in require': can not access non-shareable objects in constant Kernel::RUBYGEMS_ACTIVATION_MONITOR by non-main ractor. (Ractor::IsolationError)
from <internal:/opt/rubies/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:167:in `require'
from notractor.rb:8:in `block in <main>'
<internal:/opt/rubies/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:37:in `require': can not access non-shareable objects in constant Kernel::RUBYGEMS_ACTIVATION_MONITOR by non-main ractor. (Ractor::IsolationError)
from notractor.rb:8:in `block in <main>'
<internal:ractor>:345:in `select': thrown by remote Ractor. (Ractor::RemoteError)
from notractor.rb:11:in `<main>'
<internal:/opt/rubies/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:164:in `ensure in require': can not access non-shareable objects in constant Kernel::RUBYGEMS_ACTIVATION_MONITOR by non-main ractor. (Ractor::IsolationError)
from <internal:/opt/rubies/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:167:in `require'
from notractor.rb:8:in `block in <main>'
<internal:/opt/rubies/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:37:in `require': can not access non-shareable objects in constant Kernel::RUBYGEMS_ACTIVATION_MONITOR by non-main ractor. (Ractor::IsolationError)
from notractor.rb:8:in `block in <main>'
This is easy to fix by calling require 'pp'
in the top from the main Ractor - but I don't think it is expected for developers. We should optimize for developer's happiness and either make it just work or make it clear that everything should be required beforehand.
Updated by Eregon (Benoit Daloze) almost 4 years ago
- Related to Bug #17420: Unsafe mutation of $" when doing non-RubyGems require in Ractor added
Updated by Eregon (Benoit Daloze) almost 4 years ago
I doubt require
can ever be supported in a Ractor, see #17420.
It seems there is no good solution for this, and besides this problem not only happens with pp
but with any kind of "autoloaded" library/gem.
Updated by duerst (Martin Dürst) almost 4 years ago
My preference would be to make require
work everywhere, but always be executed in the main Reactor. That would just be part of the semantics of require
.
Updated by marcandre (Marc-Andre Lafortune) almost 4 years ago
I wrote a similar opinion to Martin Dürst's in #17420. I propose that we comment there (simply because the issue is older and more general)
Updated by kirs (Kir Shatrov) almost 4 years ago
Updated by ko1 (Koichi Sasada) almost 4 years ago
- Status changed from Open to Closed
continue to discuss on #17420.