summaryrefslogtreecommitdiff
path: root/vm_core.h
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-19 06:38:58 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-22 00:03:00 +0900
commita2950369bd8a5866092f6badf59b0811653a6092 (patch)
treeb8933f0f3f87618c04290e420222daef3a63e68d /vm_core.h
parentc7a5cc2c3098ea74343a0dbab36b3a65bc7a4144 (diff)
TracePoint.new(&block) should be ractor-local
TracePoint should be ractor-local because the Proc can violate the Ractor-safe.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3943
Diffstat (limited to 'vm_core.h')
-rw-r--r--vm_core.h19
1 files changed, 12 insertions, 7 deletions
diff --git a/vm_core.h b/vm_core.h
index 304885b9ce..e86026ab50 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -619,9 +619,6 @@ typedef struct rb_vm_struct {
VALUE cmd[RUBY_NSIG];
} trap_list;
- /* hook */
- rb_hook_list_t global_hooks;
-
/* relation table of ensure - rollback for callcc */
struct st_table *ensure_rollback_table;
@@ -1973,17 +1970,25 @@ rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_ev
rb_exec_event_hooks(&trace_arg, hooks, pop_p);
}
+rb_hook_list_t *rb_ractor_hooks(rb_ractor_t *cr);;
+
static inline rb_hook_list_t *
-rb_vm_global_hooks(const rb_execution_context_t *ec)
+rb_ec_ractor_hooks(const rb_execution_context_t *ec)
{
- return &rb_ec_vm_ptr(ec)->global_hooks;
+ rb_hook_list_t *hooks = rb_ractor_hooks(rb_ec_ractor_ptr(ec));
+ if (LIKELY(hooks == NULL)) {
+ return NULL;
+ }
+ else {
+ return hooks;
+ }
}
#define EXEC_EVENT_HOOK(ec_, flag_, self_, id_, called_id_, klass_, data_) \
- EXEC_EVENT_HOOK_ORIG(ec_, rb_vm_global_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 0)
+ EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 0)
#define EXEC_EVENT_HOOK_AND_POP_FRAME(ec_, flag_, self_, id_, called_id_, klass_, data_) \
- EXEC_EVENT_HOOK_ORIG(ec_, rb_vm_global_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 1)
+ EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 1)
static inline void
rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)