From: marcandre-ruby-core@... Date: 2020-12-01T09:23:41+00:00 Subject: [ruby-core:101176] [Ruby master Bug#17359] Ractor copy mode is not Ractor-safe Issue #17359 has been updated by marcandre (Marc-Andre Lafortune). ko1 (Koichi Sasada) wrote in #note-1: > mmm, should not call `clone` here? Sorry, I don't understand. Above code should be same with `initialize_copy` => `initialize_clone`, if that's what you mean? The issue I'm pointing out is that one can register the new copy in the initial Ractor and use that reference later to mutate the object. ---------------------------------------- Bug #17359: Ractor copy mode is not Ractor-safe https://bugs.ruby-lang.org/issues/17359#change-88862 * Author: marcandre (Marc-Andre Lafortune) * Status: Open * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.0.0dev (2020-11-30T10:06:25Z master 89774a938a) [x86_64-darwin18] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- It should not be possible to mutate an object across Ractors, but the copy mode allows it currently: ```ruby class Foo attr_accessor :x def initialize_copy(*) $last = self super end end o = Foo.new o.x = 42 r = Ractor.new(o) do |copy| puts copy.x # => 42 Ractor.yield :sync Ractor.yield :sync puts copy.x # => 666 end r.take # => :sync $last.x = 666 r.take # => :sync r.take ``` Maybe the `copy` object should be marked as moved? -- https://bugs.ruby-lang.org/ Unsubscribe: