[#122258] [Ruby Misc#21367] Remove link to ruby-doc.org from www.ruby-lang.org/en/documentation/ — "p8 (Petrik de Heus) via ruby-core" <ruby-core@...>
Issue #21367 has been reported by p8 (Petrik de Heus).
11 messages
2025/05/23
[ruby-core:122328] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes
From:
"osyoyu (Daisuke Aritomo) via ruby-core" <ruby-core@...>
Date:
2025-05-28 14:29:01 UTC
List:
ruby-core #122328
Issue #21368 has been updated by osyoyu (Daisuke Aritomo).
File 0001-Bug-21368-Transfer-finalizer-when-moving-between-Rac.patch added
The script in the description didn't crash in my environments (the following). Explicitly calling `GC.start` did.
- Linux `ruby 3.5.0dev (2025-05-28T04:34:40Z master d064fd067b) +PRISM [x86_64-linux]`
- macOS `ruby 3.5.0dev (2025-05-28T04:34:40Z master d064fd067b) +PRISM [arm64-darwin24]`
```ruby
r = Ractor.new do
Ractor.receive # don't bind to a variable (let it be garbage collected)
GC.start
end
o = Object.new
ObjectSpace.define_finalizer(o, proc { |id| })
r.send(o, move: true)
r.take
```
I have attached an updated version of @zzak_'s patch which resolves this crash, but I suppose this is inappropiate since this will leak outer variables in the following case:
```ruby
r = Ractor.new do
Ractor.receive
GC.start # `unshareable` happens to get read in this Ractor
end
o = Object.new
unshareable = +"hello"
ObjectSpace.define_finalizer(o, proc { |id| p unshareable })
r.send(o, move: true)
r.take
```
Maybe simply marking objects with a finalizer ineligible for moving is more appropiate.
----------------------------------------
Bug #21368: Moving objects with finalizer between Ractors crashes
https://bugs.ruby-lang.org/issues/21368#change-113475
* Author: peterzhu2118 (Peter Zhu)
* Status: Assigned
* Assignee: ractor
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
When an object is moved to a different Ractor, the finalizers are not copied to the new object, so it will have the `FL_FINALIZE` flag set but no entry in the finalizer table.
The following script crashes:
```ruby
r = Ractor.new do
loop { Ractor.receive }
end
1_000.times do
o = Object.new
ObjectSpace.define_finalizer(o, proc { |id| })
r.send(o, move: true)
end
```
---Files--------------------------------
0001-Bug-21368-Transfer-finalizer-when-moving-between-Rac.patch (883 Bytes)
--
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/