diff options
author | Koichi Sasada <ko1@atdot.net> | 2020-12-18 17:49:22 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2020-12-18 17:50:01 +0900 |
commit | 61236770e6cc41f1364dc04249d845def03d9f37 (patch) | |
tree | 76ebd95b434d811f550db4fdc044a4b91b89a863 /gc.c | |
parent | 75416b86287c8266cef3a8b372625c1738661a24 (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.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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 |