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() &&