7033292: G1: nightly failure: Non-dirty cards in region that should be dirty

Mon, 04 Apr 2011 13:18:35 -0400

author
tonyp
date
Mon, 04 Apr 2011 13:18:35 -0400
changeset 2716
c84ee870e0b9
parent 2715
abdfc822206f
child 2717
371bbc844bf1

7033292: G1: nightly failure: Non-dirty cards in region that should be dirty
Summary: The epochs on the card cache array are initialized to 0 and our initial epoch also starts at 0. So, until the first GC, it might be possible to successfully "claim" a card which was in fact never initialized.
Reviewed-by: johnc, iveresov, ysr

src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp	Wed Mar 30 10:26:59 2011 -0400
     1.2 +++ b/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp	Mon Apr 04 13:18:35 2011 -0400
     1.3 @@ -51,7 +51,11 @@
     1.4    _cache_size_index(0), _expand_card_counts(false),
     1.5    _hot_cache(NULL),
     1.6    _def_use_cache(false), _use_cache(false),
     1.7 -  _n_periods(0),
     1.8 +  // We initialize the epochs of the array to 0. By initializing
     1.9 +  // _n_periods to 1 and not 0 we automatically invalidate all the
    1.10 +  // entries on the array. Otherwise we might accidentally think that
    1.11 +  // we claimed a card that was in fact never set (see CR7033292).
    1.12 +  _n_periods(1),
    1.13    _threads(NULL), _n_threads(0)
    1.14  {
    1.15  

mercurial