summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2022-06-15 21:32:29 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2022-06-15 21:32:30 -0700
commit1ffc6c43f696fc18f1d3b52b09a2ef0dd00ac09c (patch)
tree030756e9e52718846a403c330f71cb38e850d37d
parent332985c1788ea438ae87830386fde49677cc6e14 (diff)
MJIT: Deal with mjit_free_iseq on mjit_notify_waitpid
-rw-r--r--mjit.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/mjit.c b/mjit.c
index 45b2d13674..043bb34c32 100644
--- a/mjit.c
+++ b/mjit.c
@@ -355,16 +355,18 @@ mjit_notify_waitpid(int status)
remove_file(so_file);
// Set the jit_func if successful
- if ((uintptr_t)func > (uintptr_t)LAST_JIT_ISEQ_FUNC) {
+ if (current_cc_unit->iseq != NULL) { // mjit_free_iseq could nullify this
rb_iseq_t *iseq = current_cc_unit->iseq;
- double end_time = real_ms_time();
- verbose(1, "JIT success (%.1fms): %s@%s:%ld -> %s",
- end_time - current_cc_ms, RSTRING_PTR(ISEQ_BODY(iseq)->location.label),
- RSTRING_PTR(rb_iseq_path(iseq)), FIX2LONG(ISEQ_BODY(iseq)->location.first_lineno), c_file);
+ if ((uintptr_t)func > (uintptr_t)LAST_JIT_ISEQ_FUNC) {
+ double end_time = real_ms_time();
+ verbose(1, "JIT success (%.1fms): %s@%s:%ld -> %s",
+ end_time - current_cc_ms, RSTRING_PTR(ISEQ_BODY(iseq)->location.label),
+ RSTRING_PTR(rb_iseq_path(iseq)), FIX2LONG(ISEQ_BODY(iseq)->location.first_lineno), c_file);
- add_to_list(current_cc_unit, &active_units);
+ add_to_list(current_cc_unit, &active_units);
+ }
MJIT_ATOMIC_SET(ISEQ_BODY(iseq)->jit_func, func);
- }
+ } // TODO: free unit on else?
current_cc_unit = NULL;
// Run compaction if it should