void mono_sgen_find_section_pin_queue_start_end (GCMemSection *section) { DEBUG (6, fprintf (gc_debug_file, "Pinning from section %p (%p-%p)\n", section, section->data, section->end_data)); section->pin_queue_start = mono_sgen_find_optimized_pin_queue_area (section->data, section->end_data, §ion->pin_queue_num_entries); DEBUG (6, fprintf (gc_debug_file, "Found %d pinning addresses in section %p\n", section->pin_queue_num_entries, section)); }
static void major_find_pin_queue_start_ends (SgenGrayQueue *queue) { MSBlockInfo *block; FOREACH_BLOCK (block) { block->pin_queue_start = mono_sgen_find_optimized_pin_queue_area (block->block + MS_BLOCK_SKIP, block->block + MS_BLOCK_SIZE, &block->pin_queue_num_entries); } END_FOREACH_BLOCK; }
void mono_sgen_pinned_scan_pinned_objects (SgenPinnedAllocator *alc, IterateObjectCallbackFunc callback, void *callback_data) { SgenPinnedChunk *chunk; /* look for pinned addresses for pinned-alloc objects */ mono_sgen_debug_printf (6, "Pinning from pinned-alloc objects\n"); for (chunk = alc->chunk_list; chunk; chunk = chunk->block.next) { int num_pinned; void **pinned = mono_sgen_find_optimized_pin_queue_area (chunk->start_data, (char*)chunk + chunk->num_pages * FREELIST_PAGESIZE, &num_pinned); if (num_pinned) mark_pinned_from_addresses (chunk, pinned, pinned + num_pinned, callback, callback_data); } }