Skip to content

Commit ae330ed

Browse files
committed
Add missing lock in rb_ivar_defined
If called on a class, we should acquire the lock.
1 parent 135583e commit ae330ed

1 file changed

Lines changed: 22 additions & 3 deletions

File tree

variable.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2131,12 +2131,11 @@ rb_obj_field_set(VALUE obj, shape_id_t target_shape_id, VALUE val)
21312131
}
21322132
}
21332133

2134-
VALUE
2135-
rb_ivar_defined(VALUE obj, ID id)
2134+
static VALUE
2135+
ivar_defined0(VALUE obj, ID id)
21362136
{
21372137
attr_index_t index;
21382138

2139-
if (SPECIAL_CONST_P(obj)) return Qfalse;
21402139
if (rb_shape_obj_too_complex_p(obj)) {
21412140
VALUE idx;
21422141
st_table *table = NULL;
@@ -2170,6 +2169,26 @@ rb_ivar_defined(VALUE obj, ID id)
21702169
}
21712170
}
21722171

2172+
VALUE
2173+
rb_ivar_defined(VALUE obj, ID id)
2174+
{
2175+
if (SPECIAL_CONST_P(obj)) return Qfalse;
2176+
2177+
VALUE defined;
2178+
switch (BUILTIN_TYPE(obj)) {
2179+
case T_CLASS:
2180+
case T_MODULE:
2181+
RB_VM_LOCKING() {
2182+
defined = ivar_defined0(obj, id);
2183+
}
2184+
break;
2185+
default:
2186+
defined = ivar_defined0(obj, id);
2187+
break;
2188+
}
2189+
return defined;
2190+
}
2191+
21732192
struct iv_itr_data {
21742193
VALUE obj;
21752194
struct gen_fields_tbl *fields_tbl;

0 commit comments

Comments
 (0)