示例#1
0
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
}
示例#2
0
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);
}