# HG changeset patch # User iveresov # Date 1237250881 25200 # Node ID 922c573ea67d6c12a8e801514fd5b3595033c37b # Parent 2a5da27ccae965b7b6dc3a0c28d2aa5cbad8e523 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 diff -r 2a5da27ccae9 -r 922c573ea67d src/share/vm/gc_implementation/g1/concurrentMark.cpp --- 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();