Index: common/gc_metadata.cpp =================================================================== --- common/gc_metadata.cpp (revision 646267) +++ common/gc_metadata.cpp (working copy) @@ -284,17 +284,6 @@ mutator->rem_set = NULL; mutator = mutator->next; } - - /* put back last remset block of each collector (saved in last collection) */ - unsigned int num_active_collectors = gc->num_active_collectors; - for(unsigned int i=0; icollectors[i]; - /* 1. in the first time GC, rem_set is NULL. 2. it should be NULL when NOS is forwarding_all */ - if(collector->rem_set == NULL) continue; - pool_put_entry(metadata->collector_remset_pool, collector->rem_set); - collector->rem_set = NULL; - } assert( collect_is_major_normal() || collect_is_minor()); if( collect_is_major_normal() ){ @@ -609,10 +598,7 @@ pool_put_entry(metadata->free_set_pool,dirty_set); dirty_set = pool_get_entry(global_dirty_set_pool); } - } - - - + } } void gc_prepare_dirty_set(GC* gc) @@ -653,4 +639,18 @@ { pool_put_entry(metadata->free_set_pool, block); } +void gc_reset_collectors_rem_set(GC *gc) +{ + /* put back last remset block of each collector (saved in last collection) */ + GC_Metadata* metadata = gc->metadata; + unsigned int num_active_collectors = gc->num_active_collectors; + for(unsigned int i=0; icollectors[i]; + /* 1. in the first time GC, rem_set is NULL. 2. it should be NULL when NOS is forwarding_all */ + if(collector->rem_set == NULL) continue; + pool_put_entry(metadata->collector_remset_pool, collector->rem_set); + collector->rem_set = NULL; + } +} Index: common/gc_metadata.h =================================================================== --- common/gc_metadata.h (revision 646267) +++ common/gc_metadata.h (working copy) @@ -72,8 +72,8 @@ void gc_identify_dead_weak_roots(GC *gc); void gc_update_weak_roots(GC *gc, Boolean double_fix); +void gc_reset_collectors_rem_set(GC *gc); - inline void gc_task_pool_clear(Pool* task_pool) { Vector_Block* task = pool_get_entry(task_pool); Index: gen/gen.cpp =================================================================== --- gen/gen.cpp (revision 646267) +++ gen/gen.cpp (working copy) @@ -781,7 +781,6 @@ gc->collect_result = TRUE; #ifdef GC_GEN_STATS gc_gen_stats_reset_before_collection(gc); - gc_gen_collector_stats_reset(gc); #endif nos_prepare_for_collection(nos); @@ -815,7 +814,6 @@ #ifdef GC_GEN_STATS gc->stats->num_minor_collections++; #endif - if(LOS_ADJUST_BOUNDARY) gc->tuner->kind=TRANS_NOTHING; los_collection(los); } @@ -915,10 +913,14 @@ } gc_gen_update_space_info_after_gc(gc); - + if(gc_is_gen_mode()) { + gc_reset_collectors_rem_set((GC*)gc); + } + #ifdef GC_GEN_STATS gc_gen_stats_update_after_collection(gc); gc_gen_stats_verbose(gc); + gc_gen_collector_stats_reset(gc); #endif INFO2("gc.process", "GC: end of GC_Gen\n"); Index: gen/gen_stats.cpp =================================================================== --- gen/gen_stats.cpp (revision 646267) +++ gen/gen_stats.cpp (working copy) @@ -143,7 +143,7 @@ { Collector** collector = gc->collectors; GC_Gen_Collector_Stats* stats; - for (unsigned int i=0; inum_collectors; i++){ + for (unsigned int i=0; inum_active_collectors; i++){ stats = (GC_Gen_Collector_Stats*)collector[i]->stats; memset(stats, 0, sizeof(GC_Gen_Collector_Stats)); } Index: los/lspace.h =================================================================== --- los/lspace.h (revision 646267) +++ los/lspace.h (working copy) @@ -90,7 +90,7 @@ { if(!lspace) return 0; /* FIXME:: */ - assert(lspace->committed_heap_size > (POINTER_SIZE_INT)lspace->last_surviving_size + (POINTER_SIZE_INT)lspace->last_alloced_size); + assert(lspace->committed_heap_size >= (POINTER_SIZE_INT)lspace->last_surviving_size + (POINTER_SIZE_INT)lspace->last_alloced_size); return (lspace->committed_heap_size - (POINTER_SIZE_INT)lspace->last_surviving_size - (POINTER_SIZE_INT)lspace->last_alloced_size); } Index: mark_compact/mspace_move_compact.cpp =================================================================== --- mark_compact/mspace_move_compact.cpp (revision 646267) +++ mark_compact/mspace_move_compact.cpp (working copy) @@ -224,12 +224,10 @@ #endif gc_identify_dead_weak_roots(gc); -#ifndef LOS_ADJUST_BOUNDARY #ifdef USE_32BITS_HASHCODE - if(is_fallback) + if((!LOS_ADJUST_BOUNDARY) && (is_fallback)) fallback_clear_fwd_obj_oi_init(collector); #endif -#endif debug_num_compact_blocks = 0; /* let other collectors go */ num_marking_collectors++; Index: verify/verifier_scanner.cpp =================================================================== --- verify/verifier_scanner.cpp (revision 646267) +++ verify/verifier_scanner.cpp (working copy) @@ -218,7 +218,6 @@ GC* gc = heap_verifier->gc; Heap_Verifier_Metadata* verifier_metadata = heap_verifier->heap_verifier_metadata; verifier_update_info_before_resurrect(heap_verifier); - return; #ifndef BUILD_IN_REFERENT heap_verifier->gc_verifier->is_tracing_resurrect_obj = TRUE; if(heap_verifier->is_before_gc){ @@ -238,6 +237,7 @@ heap_verifier->gc_verifier->is_tracing_resurrect_obj = FALSE; verifier_update_info_after_resurrect(heap_verifier); #endif + return; } void verifier_scan_unreachable_objects(Heap_Verifier* heap_verifier);