Mercurial > hg > truffle
changeset 639:922c573ea67d
6815683: G1: SEGV during marking
Summary: We should mark the regions that continue humongous regions as live if the first region is live.
Reviewed-by: tonyp
author | iveresov |
---|---|
date | Mon, 16 Mar 2009 17:48:01 -0700 |
parents | 2a5da27ccae9 |
children | ba50942c8138 |
files | src/share/vm/gc_implementation/g1/concurrentMark.cpp |
diffstat | 1 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp Mon Mar 16 10:52:44 2009 -0400 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp Mon Mar 16 17:48:01 2009 -0700 @@ -1232,7 +1232,16 @@ if (!_final && _regions_done == 0) _start_vtime_sec = os::elapsedVTime(); - if (hr->continuesHumongous()) return false; + if (hr->continuesHumongous()) { + HeapRegion* hum_start = hr->humongous_start_region(); + // If the head region of the humongous region has been determined + // to be alive, then all the tail regions should be marked + // such as well. + if (_region_bm->at(hum_start->hrs_index())) { + _region_bm->par_at_put(hr->hrs_index(), 1); + } + return false; + } HeapWord* nextTop = hr->next_top_at_mark_start(); HeapWord* start = hr->top_at_conc_mark_count();