Mercurial > hg > truffle
diff src/share/vm/gc_implementation/g1/heapRegion.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 | 9bb2c10ac07b |
children | 1ee8caae33af |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/heapRegion.cpp Wed Jul 30 10:45:52 2008 -0700 +++ b/src/share/vm/gc_implementation/g1/heapRegion.cpp Wed Aug 06 11:57:31 2008 -0400 @@ -263,8 +263,7 @@ } void HeapRegion::hr_clear(bool par, bool clear_space) { - _humongous = false; - _humongous_start = false; + _humongous_type = NotHumongous; _humongous_start_region = NULL; _in_collection_set = false; _is_gc_alloc_region = false; @@ -284,7 +283,7 @@ // If this is parallel, this will be done later. HeapRegionRemSet* hrrs = rem_set(); if (hrrs != NULL) hrrs->clear(); - _claimed = 0; + _claimed = InitialClaimValue; } zero_marked_bytes(); set_sort_index(-1); @@ -305,7 +304,7 @@ // </PREDICTION> void HeapRegion::set_startsHumongous() { - _humongous_start = true; _humongous = true; + _humongous_type = StartsHumongous; _humongous_start_region = this; assert(end() == _orig_end, "Should be normal before alloc."); } @@ -368,11 +367,11 @@ : G1OffsetTableContigSpace(sharedOffsetArray, mr, is_zeroed), _next_fk(HeapRegionDCTOC::NoFilterKind), _hrs_index(-1), - _humongous(false), _humongous_start(false), _humongous_start_region(NULL), + _humongous_type(NotHumongous), _humongous_start_region(NULL), _in_collection_set(false), _is_gc_alloc_region(false), _is_on_free_list(false), _is_on_unclean_list(false), _next_in_special_set(NULL), _orig_end(NULL), - _claimed(0), _evacuation_failed(false), + _claimed(InitialClaimValue), _evacuation_failed(false), _prev_marked_bytes(0), _next_marked_bytes(0), _sort_index(-1), _popularity(NotPopular), _young_type(NotYoung), _next_young_region(NULL), @@ -426,7 +425,7 @@ void HeapRegion::set_continuesHumongous(HeapRegion* start) { // The order is important here. start->add_continuingHumongousRegion(this); - _humongous = true; _humongous_start = false; + _humongous_type = ContinuesHumongous; _humongous_start_region = start; }