Skip to content

Commit feb8331

Browse files
jhawthornbyroot
authored andcommitted
Atomic CC table set in cache_callable_method_entry
1 parent 6018967 commit feb8331

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

internal/class.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ RCLASS_WRITE_CALLABLE_M_TBL(VALUE klass, struct rb_id_table *table)
630630
static inline void
631631
RCLASS_WRITE_CC_TBL(VALUE klass, VALUE table)
632632
{
633-
RB_OBJ_WRITE(klass, &RCLASSEXT_CC_TBL(RCLASS_EXT_WRITABLE(klass)), table);
633+
RB_OBJ_ATOMIC_WRITE(klass, &RCLASSEXT_CC_TBL(RCLASS_EXT_WRITABLE(klass)), table);
634634
}
635635

636636
static inline void

vm_method.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1786,7 +1786,14 @@ cache_callable_method_entry(VALUE klass, ID mid, const rb_callable_method_entry_
17861786
#endif
17871787
}
17881788
else {
1789-
vm_ccs_create(klass, cc_tbl, mid, cme);
1789+
if (rb_multi_ractor_p()) {
1790+
VALUE new_cc_tbl = rb_vm_cc_table_dup(cc_tbl);
1791+
vm_ccs_create(klass, new_cc_tbl, mid, cme);
1792+
RB_OBJ_ATOMIC_WRITE(klass, &RCLASSEXT_CC_TBL(RCLASS_EXT_WRITABLE(klass)), new_cc_tbl);
1793+
}
1794+
else {
1795+
vm_ccs_create(klass, cc_tbl, mid, cme);
1796+
}
17901797
}
17911798
}
17921799

0 commit comments

Comments
 (0)