From 2cea8e014dbbbb68e4e8be367529b2beae564c54 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Thu, 8 Dec 2022 10:31:45 -0800 Subject: [PATCH] MJIT: Mark MJIT's objects from mjit_mark It looks like the current way of marking objects was breaking eightbitraptor's upcoming VWA changes and this seems to fix it. --- mjit.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mjit.c b/mjit.c index c553383c73..31c3d709da 100644 --- a/mjit.c +++ b/mjit.c @@ -1721,8 +1721,6 @@ mjit_init(const struct mjit_options *opts) rb_mMJITC = rb_const_get(rb_mMJIT, rb_intern("C")); rb_cMJITCompiler = rb_funcall(rb_const_get(rb_mMJIT, rb_intern("Compiler")), rb_intern("new"), 0); rb_cMJITIseqPtr = rb_funcall(rb_mMJITC, rb_intern("rb_iseq_t"), 0); - rb_gc_register_mark_object(rb_cMJITCompiler); - rb_gc_register_mark_object(rb_cMJITIseqPtr); mjit_call_p = true; mjit_pid = getpid(); @@ -1922,6 +1920,11 @@ mjit_mark(void) return; RUBY_MARK_ENTER("mjit"); + // Mark objects used by the MJIT compiler + rb_gc_mark(rb_cMJITCompiler); + rb_gc_mark(rb_cMJITIseqPtr); + + // Mark JIT-compiled ISEQs struct rb_mjit_unit *unit = NULL; ccan_list_for_each(&active_units.head, unit, unode) { rb_gc_mark((VALUE)unit->iseq);