summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-18 17:49:22 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-18 17:50:01 +0900
commit61236770e6cc41f1364dc04249d845def03d9f37 (patch)
tree76ebd95b434d811f550db4fdc044a4b91b89a863 /gc.c
parent75416b86287c8266cef3a8b372625c1738661a24 (diff)
need to sync gc_finalize_deferred
gc_finalize_deferred() runs finalizers and it accesses objspace, so it need to sync.
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gc.c b/gc.c
index 0c82179eeb..cb7b8af111 100644
--- a/gc.c
+++ b/gc.c
@@ -3725,9 +3725,15 @@ static void
gc_finalize_deferred(void *dmy)
{
rb_objspace_t *objspace = dmy;
- if (ATOMIC_EXCHANGE(finalizing, 1)) return;
- finalize_deferred(objspace);
- ATOMIC_SET(finalizing, 0);
+
+ RB_VM_LOCK_ENTER();
+ {
+ rb_objspace_t *objspace = dmy;
+ if (ATOMIC_EXCHANGE(finalizing, 1)) return;
+ finalize_deferred(objspace);
+ ATOMIC_SET(finalizing, 0);
+ }
+ RB_VM_LOCK_LEAVE();
}
static void