aboutsummaryrefslogtreecommitdiffstats
path: root/mjit_worker.c
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2019-10-13 19:29:46 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2019-10-13 19:31:18 -0700
commit6fa3492362dc91cfec7eb4fd55918791da5a34fb (patch)
treecab85f1b4883fd740f26227a46122a6eff0e9ebc /mjit_worker.c
parent183b42150962e507cd69ceddb64ad2a10f02fdfa (diff)
downloadruby-6fa3492362dc91cfec7eb4fd55918791da5a34fb.tar.gz
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.c6
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);
}