diff --git a/gc.c b/gc.c index d9c873166f..fcb9c6454e 100644 --- a/gc.c +++ b/gc.c @@ -7347,15 +7347,19 @@ rb_gc_force_recycle(VALUE obj) void rb_gc_register_mark_object(VALUE obj) { - VALUE ary_ary = GET_VM()->mark_object_ary; - VALUE ary = rb_ary_last(0, 0, ary_ary); + RB_VM_LOCK_ENTER(); + { + VALUE ary_ary = GET_VM()->mark_object_ary; + VALUE ary = rb_ary_last(0, 0, ary_ary); - if (ary == Qnil || RARRAY_LEN(ary) >= MARK_OBJECT_ARY_BUCKET_SIZE) { - ary = rb_ary_tmp_new(MARK_OBJECT_ARY_BUCKET_SIZE); - rb_ary_push(ary_ary, ary); + if (ary == Qnil || RARRAY_LEN(ary) >= MARK_OBJECT_ARY_BUCKET_SIZE) { + ary = rb_ary_tmp_new(MARK_OBJECT_ARY_BUCKET_SIZE); + rb_ary_push(ary_ary, ary); + } + + rb_ary_push(ary, obj); } - - rb_ary_push(ary, obj); + RB_VM_LOCK_LEAVE(); } void