Add missing lock in rb_ivar_defined
If called on a class, we should acquire the lock.
This commit is contained in:
parent
1f4913db97
commit
206110a2a8
Notes:
git
2025-06-04 06:26:33 +00:00
25
variable.c
25
variable.c
@ -2125,12 +2125,11 @@ rb_obj_field_set(VALUE obj, shape_id_t target_shape_id, VALUE val)
|
||||
}
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_ivar_defined(VALUE obj, ID id)
|
||||
static VALUE
|
||||
ivar_defined0(VALUE obj, ID id)
|
||||
{
|
||||
attr_index_t index;
|
||||
|
||||
if (SPECIAL_CONST_P(obj)) return Qfalse;
|
||||
if (rb_shape_obj_too_complex_p(obj)) {
|
||||
VALUE idx;
|
||||
st_table *table = NULL;
|
||||
@ -2164,6 +2163,26 @@ rb_ivar_defined(VALUE obj, ID id)
|
||||
}
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_ivar_defined(VALUE obj, ID id)
|
||||
{
|
||||
if (SPECIAL_CONST_P(obj)) return Qfalse;
|
||||
|
||||
VALUE defined;
|
||||
switch (BUILTIN_TYPE(obj)) {
|
||||
case T_CLASS:
|
||||
case T_MODULE:
|
||||
RB_VM_LOCKING() {
|
||||
defined = ivar_defined0(obj, id);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
defined = ivar_defined0(obj, id);
|
||||
break;
|
||||
}
|
||||
return defined;
|
||||
}
|
||||
|
||||
struct iv_itr_data {
|
||||
VALUE obj;
|
||||
struct gen_fields_tbl *fields_tbl;
|
||||
|
Loading…
x
Reference in New Issue
Block a user