diff --git a/gc.c b/gc.c index e920348a12..f0189294bd 100644 --- a/gc.c +++ b/gc.c @@ -3060,7 +3060,6 @@ rb_gc_mark_roots(void *objspace, const char **categoryp) MARK_CHECKPOINT("vm"); rb_vm_mark(vm); - if (vm->self) gc_mark_internal(vm->self); MARK_CHECKPOINT("end_proc"); rb_mark_end_proc(); diff --git a/vm.c b/vm.c index 6f20d43ee4..7b0775fbb3 100644 --- a/vm.c +++ b/vm.c @@ -2982,6 +2982,7 @@ rb_vm_update_references(void *ptr) if (ptr) { rb_vm_t *vm = ptr; + vm->self = rb_gc_location(vm->self); vm->mark_object_ary = rb_gc_location(vm->mark_object_ary); vm->load_path = rb_gc_location(vm->load_path); vm->load_path_snapshot = rb_gc_location(vm->load_path_snapshot); @@ -3068,6 +3069,8 @@ rb_vm_mark(void *ptr) rb_gc_mark_maybe(*list->varptr); } + rb_gc_mark_movable(vm->self); + if (vm->main_namespace) { rb_namespace_entry_mark((void *)vm->main_namespace); }