Mercurial > hg > truffle
diff src/share/vm/gc_implementation/g1/heapRegion.hpp @ 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 | 1ee8caae33af |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/heapRegion.hpp Wed Jul 30 10:45:52 2008 -0700 +++ b/src/share/vm/gc_implementation/g1/heapRegion.hpp Wed Aug 06 11:57:31 2008 -0400 @@ -168,6 +168,12 @@ friend class VMStructs; private: + enum HumongousType { + NotHumongous = 0, + StartsHumongous, + ContinuesHumongous + }; + // The next filter kind that should be used for a "new_dcto_cl" call with // the "traditional" signature. HeapRegionDCTOC::FilterKind _next_fk; @@ -188,8 +194,7 @@ // sequence, otherwise -1. int _hrs_index; - bool _humongous; // starts or continues a humongous object - bool _humongous_start; // starts a humongous object + HumongousType _humongous_type; // For a humongous region, region in which it starts. HeapRegion* _humongous_start_region; // For the start region of a humongous sequence, it's original end(). @@ -308,6 +313,13 @@ MaxAge = 2, NoOfAges = MaxAge+1 }; + enum ClaimValues { + InitialClaimValue = 0, + FinalCountClaimValue = 1, + NoteEndClaimValue = 2, + ScrubRemSetClaimValue = 3 + }; + // Concurrent refinement requires contiguous heap regions (in which TLABs // might be allocated) to be zero-filled. Each region therefore has a // zero-fill-state. @@ -355,9 +367,9 @@ _prev_marked_bytes = _next_marked_bytes = 0; } - bool isHumongous() const { return _humongous; } - bool startsHumongous() const { return _humongous_start; } - bool continuesHumongous() const { return _humongous && ! _humongous_start; } + bool isHumongous() const { return _humongous_type != NotHumongous; } + bool startsHumongous() const { return _humongous_type == StartsHumongous; } + bool continuesHumongous() const { return _humongous_type == ContinuesHumongous; } // For a humongous region, region in which it starts. HeapRegion* humongous_start_region() const { return _humongous_start_region;