need to sync gc_finalize_deferred

gc_finalize_deferred() runs finalizers and it accesses objspace,
so it need to sync.
This commit is contained in:
Koichi Sasada 2020-12-18 17:49:22 +09:00
Родитель 75416b8628
Коммит 61236770e6
1 изменённых файлов: 9 добавлений и 3 удалений

12
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