8000 Fix ractor move of unshareable frozen objects · github/ruby@38af38e · GitHub
[go: up one dir, main page]

Skip to content

Commit 38af38e

Browse files
luke-gruko1
authored andcommitted
Fix ractor move of unshareable frozen objects
These objects didn't retain their frozen status after the move Bug [#19408]
1 parent 1eb5c03 commit 38af38e

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

bootstraptest/test_ractor.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,17 @@ def check obj1
752752
end
753753
}
754754

755+
# unshareable frozen objects should still be frozen in new ractor after move
756+
assert_equal 'true', %q{
757+
r = Ractor.new do
758+
obj = receive
759+
{ frozen: obj.frozen? }
760+
end
761+
obj = [Object.new].freeze
762+
r.send(obj, move: true)
763+
r.take[:frozen]
764+
}
765+
755766
# move with yield
756767
assert_equal 'hello', %q{
757768
r = Ractor.new do

ractor.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3581,6 +3581,10 @@ move_leave(VALUE obj, struct obj_traverse_replace_data *data)
35813581
rb_replace_generic_ivar(v, obj);
35823582
}
35833583

3584+
if (OBJ_FROZEN(obj)) {
3585+
OBJ_FREEZE(v);
3586+
}
3587+
35843588
// TODO: generic_ivar
35853589

35863590
ractor_moved_bang(obj);

0 commit comments

Comments
 (0)
0