Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/concurrentMark.cpp @ 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 | 7ea5ca260b28 |
children | bd441136a5ce |
comparison
equal
deleted
inserted
replaced
638:2a5da27ccae9 | 639:922c573ea67d |
---|---|
1230 _co_tracker->update(); | 1230 _co_tracker->update(); |
1231 | 1231 |
1232 if (!_final && _regions_done == 0) | 1232 if (!_final && _regions_done == 0) |
1233 _start_vtime_sec = os::elapsedVTime(); | 1233 _start_vtime_sec = os::elapsedVTime(); |
1234 | 1234 |
1235 if (hr->continuesHumongous()) return false; | 1235 if (hr->continuesHumongous()) { |
1236 HeapRegion* hum_start = hr->humongous_start_region(); | |
1237 // If the head region of the humongous region has been determined | |
1238 // to be alive, then all the tail regions should be marked | |
1239 // such as well. | |
1240 if (_region_bm->at(hum_start->hrs_index())) { | |
1241 _region_bm->par_at_put(hr->hrs_index(), 1); | |
1242 } | |
1243 return false; | |
1244 } | |
1236 | 1245 |
1237 HeapWord* nextTop = hr->next_top_at_mark_start(); | 1246 HeapWord* nextTop = hr->next_top_at_mark_start(); |
1238 HeapWord* start = hr->top_at_conc_mark_count(); | 1247 HeapWord* start = hr->top_at_conc_mark_count(); |
1239 assert(hr->bottom() <= start && start <= hr->end() && | 1248 assert(hr->bottom() <= start && start <= hr->end() && |
1240 hr->bottom() <= nextTop && nextTop <= hr->end() && | 1249 hr->bottom() <= nextTop && nextTop <= hr->end() && |