diff --git a/bootstraptest/test_ractor.rb b/bootstraptest/test_ractor.rb index 36ccc005dc..4383795dc1 100644 --- a/bootstraptest/test_ractor.rb +++ b/bootstraptest/test_ractor.rb @@ -1643,6 +1643,24 @@ assert_match /\Atest_ractor\.rb:1:\s+warning:\s+Ractor is experimental/, %q{ eval("Ractor.new{}.take", nil, "test_ractor.rb", 1) } +# check moved object +assert_equal 'ok', %q{ + r = Ractor.new do + Ractor.receive + GC.start + :ok + end + + obj = begin + raise + rescue => e + e = Marshal.load(Marshal.dump(e)) + end + + r.send obj, move: true + r.take +} + ## Ractor::Selector # Selector#empty? returns true diff --git a/ractor.c b/ractor.c index 8a7154ac27..8362f2f332 100644 --- a/ractor.c +++ b/ractor.c @@ -3491,6 +3491,8 @@ ractor_moved_bang(VALUE obj) rv->v3 = 0; rv->flags = rv->flags & ~fl_users; + if (BUILTIN_TYPE(obj) == T_OBJECT) ROBJECT_SET_SHAPE_ID(obj, ROOT_SHAPE_ID); + // TODO: record moved location }