diff options
author | Koichi Sasada <ko1@atdot.net> | 2020-12-17 17:29:05 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2020-12-17 18:13:40 +0900 |
commit | da3438a50454706cce2e5b06bdad498b42977f8f (patch) | |
tree | 0eacbf182a7216fe81ab75ec65167ba1029552e5 /gc.c | |
parent | 7f11c8086a4b5924737223322e24be23e9ff34c5 (diff) | |
download | ruby-da3438a50454706cce2e5b06bdad498b42977f8f.tar.gz |
sync obj_to_id_tbl
objspace->obj_to_id_tbl is a shared table so we need to synchronize
it to access.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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 |