Skip to content

Commit 206110a

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

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

variable.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2125,12 +2125,11 @@ rb_obj_field_set(VALUE obj, shape_id_t target_shape_id, VALUE val)
21252125
}
21262126
}
21272127

2128-
VALUE
2129-
rb_ivar_defined(VALUE obj, ID id)
2128+
static VALUE
2129+
ivar_defined0(VALUE obj, ID id)
21302130
{
21312131
attr_index_t index;
21322132

2133-
if (SPECIAL_CONST_P(obj)) return Qfalse;
21342133
if (rb_shape_obj_too_complex_p(obj)) {
21352134
VALUE idx;
21362135
st_table *table = NULL;
@@ -2164,6 +2163,26 @@ rb_ivar_defined(VALUE obj, ID id)
21642163
}
21652164
}
21662165

2166+
VALUE
2167+
rb_ivar_defined(VALUE obj, ID id)
2168+
{
2169+
if (SPECIAL_CONST_P(obj)) return Qfalse;
2170+
2171+
VALUE defined;
2172+
switch (BUILTIN_TYPE(obj)) {
2173+
case T_CLASS:
2174+
case T_MODULE:
2175+
RB_VM_LOCKING() {
2176+
defined = ivar_defined0(obj, id);
2177+
}
2178+
break;
2179+
default:
2180+
defined = ivar_defined0(obj, id);
2181+
break;
2182+
}
2183+
return defined;
2184+
}
2185+
21672186
struct iv_itr_data {
21682187
VALUE obj;
21692188
struct gen_fields_tbl *fields_tbl;

0 commit comments

Comments
 (0)