comparison src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @ 355:0edda524b58c

6722565: G1: assert !r->is_on_unclean_list() fires Summary: Under certain circumstances, two cleanup threads can claim and process the same region. Reviewed-by: apetrusenko, ysr
author tonyp
date Wed, 06 Aug 2008 11:57:31 -0400
parents 37f87013dfd8
children ad8c8ca4ab0f
comparison
equal deleted inserted replaced
354:c0f8f7790199 355:0edda524b58c
2895 {} 2895 {}
2896 2896
2897 void work(int i) { 2897 void work(int i) {
2898 ParKnownGarbageHRClosure parKnownGarbageCl(_hrSorted, _chunk_size, i); 2898 ParKnownGarbageHRClosure parKnownGarbageCl(_hrSorted, _chunk_size, i);
2899 // Back to zero for the claim value. 2899 // Back to zero for the claim value.
2900 _g1->heap_region_par_iterate_chunked(&parKnownGarbageCl, i, 0); 2900 _g1->heap_region_par_iterate_chunked(&parKnownGarbageCl, i,
2901 HeapRegion::InitialClaimValue);
2901 jint regions_added = parKnownGarbageCl.marked_regions_added(); 2902 jint regions_added = parKnownGarbageCl.marked_regions_added();
2902 _hrSorted->incNumMarkedHeapRegions(regions_added); 2903 _hrSorted->incNumMarkedHeapRegions(regions_added);
2903 if (G1PrintParCleanupStats) { 2904 if (G1PrintParCleanupStats) {
2904 gclog_or_tty->print(" Thread %d called %d times, added %d regions to list.\n", 2905 gclog_or_tty->print(" Thread %d called %d times, added %d regions to list.\n",
2905 i, parKnownGarbageCl.invokes(), regions_added); 2906 i, parKnownGarbageCl.invokes(), regions_added);
2931 _collectionSetChooser->prepareForAddMarkedHeapRegionsPar(_g1->n_regions(), 2932 _collectionSetChooser->prepareForAddMarkedHeapRegionsPar(_g1->n_regions(),
2932 ChunkSize); 2933 ChunkSize);
2933 ParKnownGarbageTask parKnownGarbageTask(_collectionSetChooser, 2934 ParKnownGarbageTask parKnownGarbageTask(_collectionSetChooser,
2934 (int) ChunkSize); 2935 (int) ChunkSize);
2935 _g1->workers()->run_task(&parKnownGarbageTask); 2936 _g1->workers()->run_task(&parKnownGarbageTask);
2937
2938 assert(_g1->check_heap_region_claim_values(HeapRegion::InitialClaimValue),
2939 "sanity check");
2936 } else { 2940 } else {
2937 KnownGarbageClosure knownGarbagecl(_collectionSetChooser); 2941 KnownGarbageClosure knownGarbagecl(_collectionSetChooser);
2938 _g1->heap_region_iterate(&knownGarbagecl); 2942 _g1->heap_region_iterate(&knownGarbagecl);
2939 } 2943 }
2940 double known_garbage_end; 2944 double known_garbage_end;