1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

check main-ractor or not first

On non-multi-ractor-mode, the cost of rb_ractor_main_p() is low
so check it first.
This commit is contained in:
Koichi Sasada 2020-10-21 22:54:39 +09:00
parent 762be87759
commit 631eaa8510
Notes: git 2020-10-21 23:52:37 +09:00

View file

@ -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");
}