8040804: G1: Concurrent mark stuck in loop calling os::elapsedVTime()

Reviewed-by: brutisso, tschatzl
This commit is contained in:
Per Lidén 2014-05-14 14:32:23 +02:00
parent 3f35cb0ca0
commit 04341bfffb
2 changed files with 7 additions and 3 deletions

View File

@ -819,7 +819,7 @@ void ConcurrentMark::set_concurrency_and_phase(uint active_tasks, bool concurren
// false before we start remark. At this point we should also be // false before we start remark. At this point we should also be
// in a STW phase. // in a STW phase.
assert(!concurrent_marking_in_progress(), "invariant"); assert(!concurrent_marking_in_progress(), "invariant");
assert(_finger == _heap_end, assert(out_of_regions(),
err_msg("only way to get here: _finger: "PTR_FORMAT", _heap_end: "PTR_FORMAT, err_msg("only way to get here: _finger: "PTR_FORMAT", _heap_end: "PTR_FORMAT,
_finger, _heap_end)); _finger, _heap_end));
update_g1_committed(true); update_g1_committed(true);

View File

@ -542,8 +542,12 @@ protected:
// frequently. // frequently.
HeapRegion* claim_region(uint worker_id); HeapRegion* claim_region(uint worker_id);
// It determines whether we've run out of regions to scan // It determines whether we've run out of regions to scan. Note that
bool out_of_regions() { return _finger == _heap_end; } // the finger can point past the heap end in case the heap was expanded
// to satisfy an allocation without doing a GC. This is fine, because all
// objects in those regions will be considered live anyway because of
// SATB guarantees (i.e. their TAMS will be equal to bottom).
bool out_of_regions() { return _finger >= _heap_end; }
// Returns the task with the given id // Returns the task with the given id
CMTask* task(int id) { CMTask* task(int id) {