summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-17 17:29:05 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-17 18:13:40 +0900
commitda3438a50454706cce2e5b06bdad498b42977f8f (patch)
tree0eacbf182a7216fe81ab75ec65167ba1029552e5 /gc.c
parent7f11c8086a4b5924737223322e24be23e9ff34c5 (diff)
sync obj_to_id_tbl
objspace->obj_to_id_tbl is a shared table so we need to synchronize it to access.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3924
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gc.c b/gc.c
index a5ef670b81..386e140a21 100644
--- a/gc.c
+++ b/gc.c
@@ -4046,9 +4046,9 @@ cached_object_id(VALUE obj)
VALUE id;
rb_objspace_t *objspace = &rb_objspace;
+ RB_VM_LOCK_ENTER();
if (st_lookup(objspace->obj_to_id_tbl, (st_data_t)obj, &id)) {
GC_ASSERT(FL_TEST(obj, FL_SEEN_OBJ_ID));
- return id;
}
else {
GC_ASSERT(!FL_TEST(obj, FL_SEEN_OBJ_ID));
@@ -4061,9 +4061,10 @@ cached_object_id(VALUE obj)
st_insert(objspace->id_to_obj_tbl, (st_data_t)id, (st_data_t)obj);
if (already_disabled == Qfalse) rb_objspace_gc_enable(objspace);
FL_SET(obj, FL_SEEN_OBJ_ID);
-
- return id;
}
+ RB_VM_LOCK_LEAVE();
+
+ return id;
}
static VALUE