summaryrefslogtreecommitdiff
path: root/mjit.c
diff options
context:
space:
mode:
Diffstat (limited to 'mjit.c')
-rw-r--r--mjit.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/mjit.c b/mjit.c
index 1578c961ae..9c2cfcfedf 100644
--- a/mjit.c
+++ b/mjit.c
@@ -677,7 +677,7 @@ mjit_init(struct mjit_options *opts)
}
static void
-stop_worker(void)
+stop_worker(int check_ints_p)
{
rb_execution_context_t *ec = GET_EC();
@@ -687,10 +687,17 @@ stop_worker(void)
stop_worker_p = TRUE; /* Setting this inside loop because RUBY_VM_CHECK_INTS may make this FALSE. */
rb_native_cond_broadcast(&mjit_worker_wakeup);
CRITICAL_SECTION_FINISH(3, "in stop_worker");
- RUBY_VM_CHECK_INTS(ec);
+ if (check_ints_p) RUBY_VM_CHECK_INTS(ec);
}
}
+/* A function to stop MJIT worker when it's not safe to allow interrupts. */
+void
+mjit_pause_without_ints(void)
+{
+ stop_worker(FALSE);
+}
+
/* Stop JIT-compiling methods but compiled code is kept available. */
VALUE
mjit_pause(int wait_p)
@@ -716,7 +723,7 @@ mjit_pause(int wait_p)
}
}
- stop_worker();
+ stop_worker(TRUE);
return Qtrue;
}
@@ -809,7 +816,7 @@ mjit_finish(void)
CRITICAL_SECTION_FINISH(3, "in mjit_finish to wakeup from pch");
/* Stop worker */
- stop_worker();
+ stop_worker(TRUE);
rb_native_mutex_destroy(&mjit_engine_mutex);
rb_native_cond_destroy(&mjit_pch_wakeup);