diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2019-10-13 19:29:46 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2019-10-13 19:31:18 -0700 |
commit | 6fa3492362dc91cfec7eb4fd55918791da5a34fb (patch) | |
tree | cab85f1b4883fd740f26227a46122a6eff0e9ebc /mjit_worker.c | |
parent | 183b42150962e507cd69ceddb64ad2a10f02fdfa (diff) |
Eliminate the possibility to leave freed ISeq
in active_units
Hoping to fix:
http://ci.rvm.jp/results/trunk-mjit@silicon-docker/2311375
Diffstat (limited to 'mjit_worker.c')
-rw-r--r-- | mjit_worker.c | 6 |
1 files 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); } |