From 631eaa85109e4d6fa31eaeed393858e1e63300a4 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Wed, 21 Oct 2020 22:54:39 +0900 Subject: check main-ractor or not first On non-multi-ractor-mode, the cost of rb_ractor_main_p() is low so check it first. --- variable.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'variable.c') diff --git a/variable.c b/variable.c index 4ed60b626d..795ee3fb0a 100644 --- a/variable.c +++ b/variable.c @@ -923,7 +923,8 @@ generic_ivtbl(VALUE obj, ID id, bool force_check_ractor) ASSERT_vm_locking(); if ((force_check_ractor || rb_is_instance_id(id)) && // not internal ID - UNLIKELY(rb_ractor_shareable_p(obj) && !rb_ractor_main_p())) { + UNLIKELY(!rb_ractor_main_p()) && + UNLIKELY(rb_ractor_shareable_p(obj))) { rb_raise(rb_eRuntimeError, "can not access instance variables of shareable objects from non-main Ractors"); } return generic_iv_tbl_; @@ -2952,7 +2953,7 @@ rb_const_set(VALUE klass, ID id, VALUE val) QUOTE_ID(id)); } - if (!rb_ractor_shareable_p(val) && !rb_ractor_main_p()) { + if (!rb_ractor_main_p() && !rb_ractor_shareable_p(val)) { rb_raise(rb_eNameError, "can not set constants with non-shareable objects by non-main Ractors"); } -- cgit v1.2.3