void verifier_scan_resurrect_objects(Heap_Verifier* heap_verifier) { GC* gc = heap_verifier->gc; Heap_Verifier_Metadata* verifier_metadata = heap_verifier->heap_verifier_metadata; verifier_update_info_before_resurrect(heap_verifier); #ifndef BUILD_IN_REFERENT heap_verifier->gc_verifier->is_tracing_resurrect_obj = TRUE; if(heap_verifier->is_before_gc){ verifier_copy_pool(verifier_metadata->obj_with_fin_pool, gc->finref_metadata->obj_with_fin_pool); verifier_trace_objsets(heap_verifier, verifier_metadata->obj_with_fin_pool); }else{ if(!heap_verifier->gc_verifier->is_before_fallback_collection){ verify_live_finalizable_obj(heap_verifier, gc->finref_metadata->obj_with_fin_pool); verifier_copy_pool_reverse_order(verifier_metadata->finalizable_obj_pool, gc->finref_metadata->finalizable_obj_pool); verifier_trace_objsets(heap_verifier, verifier_metadata->finalizable_obj_pool); verifier_clear_pool(verifier_metadata->finalizable_obj_pool, heap_verifier->heap_verifier_metadata->free_set_pool, FALSE); }else{ verifier_trace_objsets(heap_verifier, verifier_metadata->obj_with_fin_pool ); } verifier_clear_pool(verifier_metadata->obj_with_fin_pool, heap_verifier->heap_verifier_metadata->free_set_pool, FALSE); } heap_verifier->gc_verifier->is_tracing_resurrect_obj = FALSE; verifier_update_info_after_resurrect(heap_verifier); #endif }
void verifier_remove_pool(Pool* working_pool, Pool* free_pool, Boolean is_vector_stack) { verifier_clear_pool(working_pool, free_pool, is_vector_stack); sync_pool_destruct(working_pool); }