diff --git a/vm_trace.c b/vm_trace.c index 3b9f025d89..6587898284 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -59,11 +59,22 @@ rb_vm_trace_mark_event_hooks(rb_hook_list_t *hooks) /* ruby_vm_event_flags management */ +#define RUBY_EVENTS_TRACE_BY_ISEQ (RUBY_EVENT_LINE | \ + RUBY_EVENT_CLASS | \ + RUBY_EVENT_END | \ + RUBY_EVENT_CALL | \ + RUBY_EVENT_RETURN| \ + RUBY_EVENT_B_CALL| \ + RUBY_EVENT_B_RETURN) + static void update_global_event_hook(rb_event_flag_t vm_events) { + if ((vm_events & RUBY_EVENTS_TRACE_BY_ISEQ) != + (ruby_vm_event_flags & RUBY_EVENTS_TRACE_BY_ISEQ)) { + rb_iseq_trace_set_all(vm_events); + } ruby_vm_event_flags = vm_events; - rb_iseq_trace_set_all(vm_events); rb_objspace_set_event_hook(vm_events); }