* [ruby-core:122261] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes
@ 2025-05-23 19:57 peterzhu2118 (Peter Zhu) via ruby-core
2025-05-23 20:04 ` [ruby-core:122262] " peterzhu2118 (Peter Zhu) via ruby-core
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: peterzhu2118 (Peter Zhu) via ruby-core @ 2025-05-23 19:57 UTC (permalink / raw)
To: ruby-core; +Cc: peterzhu2118 (Peter Zhu)
Issue #21368 has been reported by peterzhu2118 (Peter Zhu).
----------------------------------------
Bug #21368: Moving objects with finalizer between Ractors crashes
https://bugs.ruby-lang.org/issues/21368
* Author: peterzhu2118 (Peter Zhu)
* Status: Open
* 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
```
--
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:122262] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes
2025-05-23 19:57 [ruby-core:122261] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes peterzhu2118 (Peter Zhu) via ruby-core
@ 2025-05-23 20:04 ` peterzhu2118 (Peter Zhu) via ruby-core
2025-05-27 15:03 ` [ruby-core:122312] " zzak (zzak _) via ruby-core
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: peterzhu2118 (Peter Zhu) via ruby-core @ 2025-05-23 20:04 UTC (permalink / raw)
To: ruby-core; +Cc: peterzhu2118 (Peter Zhu)
Issue #21368 has been updated by peterzhu2118 (Peter Zhu).
Assignee set to ractor
----------------------------------------
Bug #21368: Moving objects with finalizer between Ractors crashes
https://bugs.ruby-lang.org/issues/21368#change-113405
* Author: peterzhu2118 (Peter Zhu)
* Status: Open
* 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
```
--
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:122312] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes
2025-05-23 19:57 [ruby-core:122261] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes peterzhu2118 (Peter Zhu) via ruby-core
2025-05-23 20:04 ` [ruby-core:122262] " peterzhu2118 (Peter Zhu) via ruby-core
@ 2025-05-27 15:03 ` zzak (zzak _) via ruby-core
2025-05-28 14:29 ` [ruby-core:122328] " osyoyu (Daisuke Aritomo) via ruby-core
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: zzak (zzak _) via ruby-core @ 2025-05-27 15:03 UTC (permalink / raw)
To: ruby-core; +Cc: zzak (zzak _)
Issue #21368 has been updated by zzak (zzak _).
It seemed fun to patch, but I'm not sure this is correct:
https://github.com/ruby/ruby/pull/13452
----------------------------------------
Bug #21368: Moving objects with finalizer between Ractors crashes
https://bugs.ruby-lang.org/issues/21368#change-113454
* Author: peterzhu2118 (Peter Zhu)
* Status: Open
* 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
```
--
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:122328] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes
2025-05-23 19:57 [ruby-core:122261] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes peterzhu2118 (Peter Zhu) via ruby-core
2025-05-23 20:04 ` [ruby-core:122262] " peterzhu2118 (Peter Zhu) via ruby-core
2025-05-27 15:03 ` [ruby-core:122312] " zzak (zzak _) via ruby-core
@ 2025-05-28 14:29 ` osyoyu (Daisuke Aritomo) via ruby-core
2025-06-09 7:09 ` [ruby-core:122494] " zzak (zzak _) via ruby-core
2025-06-11 10:46 ` [ruby-core:122514] " osyoyu (Daisuke Aritomo) via ruby-core
4 siblings, 0 replies; 6+ messages in thread
From: osyoyu (Daisuke Aritomo) via ruby-core @ 2025-05-28 14:29 UTC (permalink / raw)
To: ruby-core; +Cc: osyoyu (Daisuke Aritomo)
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/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:122494] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes
2025-05-23 19:57 [ruby-core:122261] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes peterzhu2118 (Peter Zhu) via ruby-core
` (2 preceding siblings ...)
2025-05-28 14:29 ` [ruby-core:122328] " osyoyu (Daisuke Aritomo) via ruby-core
@ 2025-06-09 7:09 ` zzak (zzak _) via ruby-core
2025-06-11 10:46 ` [ruby-core:122514] " osyoyu (Daisuke Aritomo) via ruby-core
4 siblings, 0 replies; 6+ messages in thread
From: zzak (zzak _) via ruby-core @ 2025-06-09 7:09 UTC (permalink / raw)
To: ruby-core; +Cc: zzak (zzak _)
Issue #21368 has been updated by zzak (zzak _).
> Maybe simply marking objects with a finalizer ineligible for moving is more appropiate.
Thanks for checking, I've updated the PR to raise if the object has a finalizer. I'm not sure if we should do the check in like `make_shareable_check_shareable` instead, for example.
----------------------------------------
Bug #21368: Moving objects with finalizer between Ractors crashes
https://bugs.ruby-lang.org/issues/21368#change-113684
* 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/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ruby-core:122514] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes
2025-05-23 19:57 [ruby-core:122261] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes peterzhu2118 (Peter Zhu) via ruby-core
` (3 preceding siblings ...)
2025-06-09 7:09 ` [ruby-core:122494] " zzak (zzak _) via ruby-core
@ 2025-06-11 10:46 ` osyoyu (Daisuke Aritomo) via ruby-core
4 siblings, 0 replies; 6+ messages in thread
From: osyoyu (Daisuke Aritomo) via ruby-core @ 2025-06-11 10:46 UTC (permalink / raw)
To: ruby-core; +Cc: osyoyu (Daisuke Aritomo)
Issue #21368 has been updated by osyoyu (Daisuke Aritomo).
Maybe this ticket should be merged with https://bugs.ruby-lang.org/issues/21315 ?
----------------------------------------
Bug #21368: Moving objects with finalizer between Ractors crashes
https://bugs.ruby-lang.org/issues/21368#change-113737
* 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/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-06-11 10:47 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-23 19:57 [ruby-core:122261] [Ruby Bug#21368] Moving objects with finalizer between Ractors crashes peterzhu2118 (Peter Zhu) via ruby-core
2025-05-23 20:04 ` [ruby-core:122262] " peterzhu2118 (Peter Zhu) via ruby-core
2025-05-27 15:03 ` [ruby-core:122312] " zzak (zzak _) via ruby-core
2025-05-28 14:29 ` [ruby-core:122328] " osyoyu (Daisuke Aritomo) via ruby-core
2025-06-09 7:09 ` [ruby-core:122494] " zzak (zzak _) via ruby-core
2025-06-11 10:46 ` [ruby-core:122514] " osyoyu (Daisuke Aritomo) 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).