From 6fa3492362dc91cfec7eb4fd55918791da5a34fb Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Sun, 13 Oct 2019 19:29:46 -0700 Subject: [PATCH] Eliminate the possibility to leave freed ISeq in active_units Hoping to fix: http://ci.rvm.jp/results/trunk-mjit@silicon-docker/2311375 --- mjit_worker.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mjit_worker.c b/mjit_worker.c index 2650b1d51c..b23baf656d 100644 --- a/mjit_worker.c +++ b/mjit_worker.c @@ -1107,11 +1107,8 @@ convert_unit_to_func(struct rb_mjit_unit *unit) remove_so_file(so_file, unit); if ((uintptr_t)func > (uintptr_t)LAST_JIT_ISEQ_FUNC) { - CRITICAL_SECTION_START(3, "end of jit"); - add_to_list(unit, &active_units); verbose(1, "JIT success (%.1fms): %s@%s:%ld -> %s", end_time - start_time, iseq_label, iseq_path, iseq_lineno, c_file); - CRITICAL_SECTION_FINISH(3, "end of jit"); } return (mjit_func_t)func; } @@ -1233,6 +1230,9 @@ mjit_worker(void) rb_native_cond_wait(&mjit_gc_wakeup, &mjit_engine_mutex); } if (unit->iseq) { // Check whether GCed or not + if ((uintptr_t)func > (uintptr_t)LAST_JIT_ISEQ_FUNC) { + add_to_list(unit, &active_units); + } // Usage of jit_code might be not in a critical section. MJIT_ATOMIC_SET(unit->iseq->body->jit_func, func); }