Пример #1
0
/*
FIXME:
-This heap checker is racy regarding inlined write barriers and other JIT tricks that
depend on OP_DUMMY_USE.
*/
void
sgen_check_whole_heap (void)
{
    /*setup valid_nursery_objects*/
    if (!valid_nursery_objects)
        valid_nursery_objects = sgen_alloc_os_memory (DEFAULT_NURSERY_SIZE, SGEN_ALLOC_INTERNAL | SGEN_ALLOC_ACTIVATE, "debugging data");
    valid_nursery_object_count = 0;
    sgen_scan_area_with_callback (nursery_section->data, nursery_section->end_data, setup_mono_sgen_scan_area_with_callback, NULL, FALSE);

    broken_heap = FALSE;
    sgen_scan_area_with_callback (nursery_section->data, nursery_section->end_data, verify_object_pointers_callback, NULL, FALSE);
    major_collector.iterate_objects (TRUE, TRUE, verify_object_pointers_callback, NULL);
    sgen_los_iterate_objects (verify_object_pointers_callback, NULL);

    g_assert (!broken_heap);
}
Пример #2
0
static void
major_iterate_objects (gboolean non_pinned, gboolean pinned, IterateObjectCallbackFunc callback, void *data)
{
	if (non_pinned) {
		GCMemSection *section;
		for (section = section_list; section; section = section->block.next)
			sgen_scan_area_with_callback (section->data, section->end_data, callback, data, FALSE);
	}
	if (pinned)
		sgen_pinned_scan_objects (&pinned_allocator, callback, data);
}