summaryrefslogtreecommitdiff
path: root/vm_trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_trace.c')
-rw-r--r--vm_trace.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/vm_trace.c b/vm_trace.c
index b603293d34..ed218b8120 100644
--- a/vm_trace.c
+++ b/vm_trace.c
@@ -81,8 +81,12 @@ update_global_event_hook(rb_event_flag_t vm_events)
rb_event_flag_t enabled_iseq_events = ruby_vm_event_enabled_global_flags & ISEQ_TRACE_EVENTS;
if (new_iseq_events & ~enabled_iseq_events) {
- // Stop calling all JIT-ed code. We can't rewrite existing JIT-ed code to trace_ insns for now.
- mjit_cancel_all("TracePoint is enabled");
+ // :class events are triggered only in ISEQ_TYPE_CLASS, but mjit_target_iseq_p ignores such iseqs.
+ // Thus we don't need to cancel JIT-ed code for :class events.
+ if (new_iseq_events != RUBY_EVENT_CLASS) {
+ // Stop calling all JIT-ed code. We can't rewrite existing JIT-ed code to trace_ insns for now.
+ mjit_cancel_all("TracePoint is enabled");
+ }
/* write all ISeqs if and only if new events are added */
rb_iseq_trace_set_all(new_iseq_events | enabled_iseq_events);