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
|
static VALUE
|
||||||
rb_ivar_defined(VALUE obj, ID id)
|
ivar_defined0(VALUE obj, ID id)
|
||||||
{
|
{
|
||||||
attr_index_t index;
|
attr_index_t index;
|
||||||
|
|
||||||
if (SPECIAL_CONST_P(obj)) return Qfalse;
|
|
||||||
if (rb_shape_obj_too_complex_p(obj)) {
|
if (rb_shape_obj_too_complex_p(obj)) {
|
||||||
VALUE idx;
|
VALUE idx;
|
||||||
st_table *table = NULL;
|
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 {
|
struct iv_itr_data {
|
||||||
VALUE obj;
|
VALUE obj;
|
||||||
struct gen_fields_tbl *fields_tbl;
|
struct gen_fields_tbl *fields_tbl;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user