From aa6287cd26582e64c19e37dea3fd90b380b85d5b Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Tue, 15 Dec 2020 05:40:38 +0900 Subject: fix inline method cache sync bug `cd` is passed to method call functions to method invocation functions, but `cd` can be manipulated by other ractors simultaneously so it contains thread-safety issue. To solve this issue, this patch stores `ci` and found `cc` to `calling` and stops to pass `cd`. --- internal/vm.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'internal') diff --git a/internal/vm.h b/internal/vm.h index d146bc6850..6a525b8159 100644 --- a/internal/vm.h +++ b/internal/vm.h @@ -27,8 +27,7 @@ struct rb_callable_method_entry_struct; /* in method.h */ struct rb_method_definition_struct; /* in method.h */ struct rb_execution_context_struct; /* in vm_core.h */ struct rb_control_frame_struct; /* in vm_core.h */ -struct rb_calling_info; /* in vm_core.h */ -struct rb_call_data; +struct rb_callinfo; /* in vm_core.h */ enum method_missing_reason { MISSING_NOENTRY = 0x00, @@ -93,7 +92,7 @@ VALUE rb_eql_opt(VALUE obj1, VALUE obj2); struct rb_iseq_struct; MJIT_SYMBOL_EXPORT_BEGIN -void rb_vm_search_method_slowpath(VALUE cd_owner, struct rb_call_data *cd, VALUE klass); +const struct rb_callcache *rb_vm_search_method_slowpath(const struct rb_callinfo *ci, VALUE klass); MJIT_SYMBOL_EXPORT_END /* vm_method.c */ -- cgit v1.2.3