ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [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).