[ruby-core:122496] [Ruby Bug#21401] ObjectSpace can't count Fibers after using a Ractor

Issue #21401 has been reported by rmosolgo (Robert Mosolgo). ---------------------------------------- Bug #21401: ObjectSpace can't count Fibers after using a Ractor https://bugs.ruby-lang.org/issues/21401 * Author: rmosolgo (Robert Mosolgo) * Status: Open * ruby -v: ruby 3.5.0dev (2025-06-09T14:38:29Z master f9966b9b76) +PRISM [x86_64-darwin22] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- Hi, thanks for all your great work, Ruby crew! I have a test in my project that uses `ObjectSpace.each_object(Fiber).count` to see how many Fibers have been started by my code. This test started failing when I added other tests using `Ractor`s. I was able to isolate it with this script: ```ruby require "objspace" f = Fiber.new { 1 + 1 } GC.start p ObjectSpace.each_object(Fiber).count # => 2 Ractor.new { 1 + 1 }.take p ObjectSpace.each_object(Fiber).count # => 0 (should be 2) # The fiber _is_ there! p f # #<Fiber:0x0000000100c568a8 ractor_fibers.rb:4 (created)> ``` It seems like `ObjectSpace` can't count fibers for some reason, but I expect it to return the number of Fibers in memory. Other classes like `Hash` and `String` are not affected. It fails on Ruby 3.4.1 and 3.5-dev. I used: - `ruby 3.5.0dev (2025-06-09T14:38:29Z master f9966b9b76) +PRISM [x86_64-darwin22]` - `ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-darwin22]` Please let me know if I can help with anything else in tracking down this bug. Thanks again! -- https://bugs.ruby-lang.org/

Issue #21401 has been updated by jhawthorn (John Hawthorn). Status changed from Open to Rejected 👋 Hi Robert! This is a known issue. Once a Ractor is started `each_objects` will only return shareable objects. I expect ko1's Ractor-local GC may change this. Closing as rejected in favour of #19387. ---------------------------------------- Bug #21401: ObjectSpace can't count Fibers after using a Ractor https://bugs.ruby-lang.org/issues/21401#change-113689 * Author: rmosolgo (Robert Mosolgo) * Status: Rejected * ruby -v: ruby 3.5.0dev (2025-06-09T14:38:29Z master f9966b9b76) +PRISM [x86_64-darwin22] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- Hi, thanks for all your great work, Ruby crew! I have a test in my project that uses `ObjectSpace.each_object(Fiber).count` to see how many Fibers have been started by my code. This test started failing when I added other tests using `Ractor`s. I was able to isolate it with this script: ```ruby require "objspace" f = Fiber.new { 1 + 1 } GC.start p ObjectSpace.each_object(Fiber).count # => 2 Ractor.new { 1 + 1 }.take p ObjectSpace.each_object(Fiber).count # => 0 (should be 2) # The fiber _is_ there! p f # #<Fiber:0x0000000100c568a8 ractor_fibers.rb:4 (created)> ``` It seems like `ObjectSpace` can't count fibers for some reason, but I expect it to return the number of Fibers in memory. Other classes like `Hash` and `String` are not affected. It fails on Ruby 3.4.1 and 3.5-dev. I used: - `ruby 3.5.0dev (2025-06-09T14:38:29Z master f9966b9b76) +PRISM [x86_64-darwin22]` - `ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-darwin22]` Please let me know if I can help with anything else in tracking down this bug. Thanks again! -- https://bugs.ruby-lang.org/
participants (2)
-
jhawthorn (John Hawthorn)
-
rmosolgo (Robert Mosolgo)