gc_verify_internal_consistency() needs barrier

gc_verify_internal_consistency() accesses all slots (objects) so
all ractors should stop before starting this function.
This commit is contained in:
Koichi Sasada 2020-12-18 01:19:03 +09:00
Родитель caef364cc5
Коммит 6538c89f1c
1 изменённых файлов: 3 добавлений и 1 удалений

4
gc.c
Просмотреть файл

@ -7059,7 +7059,6 @@ gc_verify_heap_pages(rb_objspace_t *objspace)
static VALUE
gc_verify_internal_consistency_m(VALUE dummy)
{
ASSERT_vm_locking();
gc_verify_internal_consistency(&rb_objspace);
return Qnil;
}
@ -7143,6 +7142,9 @@ gc_verify_internal_consistency_(rb_objspace_t *objspace)
static void
gc_verify_internal_consistency(rb_objspace_t *objspace)
{
ASSERT_vm_locking();
rb_vm_barrier(); // stop other ractors
unsigned int prev_during_gc = during_gc;
during_gc = FALSE; // stop gc here
{