Add missing lock in rb_ivar_defined

If called on a class, we should acquire the lock.
This commit is contained in:
Jean Boussier 2025-06-03 15:52:29 +02:00
parent 1f4913db97
commit 206110a2a8
Notes: git 2025-06-04 06:26:33 +00:00

View File

@ -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;