[前][次][番号順一覧][スレッド一覧]

ruby-changes:74481

From: Takashi <ko1@a...>
Date: Mon, 14 Nov 2022 08:14:05 +0900 (JST)
Subject: [ruby-changes:74481] dc5e2eaab6 (master): Refactor update_global_event_hook

https://git.ruby-lang.org/ruby.git/commit/?id=dc5e2eaab6

From dc5e2eaab6a82d31992127e4a3ba4028824d7b92 Mon Sep 17 00:00:00 2001
From: Takashi Kokubun <takashikkbn@g...>
Date: Sun, 13 Nov 2022 15:13:13 -0800
Subject: Refactor update_global_event_hook

It seems more readable to put JIT invalidation code together.
---
 vm_trace.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/vm_trace.c b/vm_trace.c
index 0b9bd53ebe..3e5cb29156 100644
--- a/vm_trace.c
+++ b/vm_trace.c
@@ -91,28 +91,27 @@ update_global_event_hook(rb_event_flag_t prev_events, rb_event_flag_t new_events https://github.com/ruby/ruby/blob/trunk/vm_trace.c#L91
     bool enable_c_call   = (prev_events & RUBY_EVENT_C_CALL)   == 0 && (new_events & RUBY_EVENT_C_CALL);
     bool enable_c_return = (prev_events & RUBY_EVENT_C_RETURN) == 0 && (new_events & RUBY_EVENT_C_RETURN);
 
+    // Modify ISEQs or CCs to enable tracing
     if (first_time_iseq_events_p) {
-        // :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 only when new events are added for the first time
         rb_iseq_trace_set_all(new_iseq_events | enabled_iseq_events);
     }
-    else {
-        // if c_call or c_return is activated:
-        if (enable_c_call || enable_c_return) {
-            rb_clear_attr_ccs();
-        }
+    // if c_call or c_return is activated
+    else if (enable_c_call || enable_c_return) {
+        rb_clear_attr_ccs();
     }
 
     ruby_vm_event_flags = new_events;
     ruby_vm_event_enabled_global_flags |= new_events;
     rb_objspace_set_event_hook(new_events);
 
+    // Invalidate JIT code as needed
+    if (first_time_iseq_events_p && 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.
+        // :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.
+        mjit_cancel_all("TracePoint is enabled");
+    }
     if (first_time_iseq_events_p || enable_c_call || enable_c_return) {
         // Invalidate all code when ISEQs are modified to use trace_* insns above.
         // Also invalidate when enabling c_call or c_return because generated code
-- 
cgit v1.2.3


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]