comparison src/share/vm/gc_implementation/g1/concurrentMark.cpp @ 1314:3f0549ed0c98

6921710: G1: assert(new_finger >= _finger && new_finger < _region_limit,"invariant") Summary: If CM task was aborted while scanning the last object of the specified region and the size of that object is equal to bitmap's granularity then the next offset would be equal or over the region limit which is exactly what the assertion states. Reviewed-by: ysr, tonyp, jmasa
author apetrusenko
date Thu, 18 Mar 2010 01:48:28 -0700
parents 5f1f51edaff6
children d4197f8d516a
comparison
equal deleted inserted replaced
1313:664ae0c5e0e5 1314:3f0549ed0c98
3702 // leave it there, when we restart this task, we will rescan 3702 // leave it there, when we restart this task, we will rescan
3703 // the object. It is easy to avoid this. We move the finger by 3703 // the object. It is easy to avoid this. We move the finger by
3704 // enough to point to the next possible object header (the 3704 // enough to point to the next possible object header (the
3705 // bitmap knows by how much we need to move it as it knows its 3705 // bitmap knows by how much we need to move it as it knows its
3706 // granularity). 3706 // granularity).
3707 move_finger_to(_nextMarkBitMap->nextWord(_finger)); 3707 assert(_finger < _region_limit, "invariant");
3708 HeapWord* new_finger = _nextMarkBitMap->nextWord(_finger);
3709 // Check if bitmap iteration was aborted while scanning the last object
3710 if (new_finger >= _region_limit) {
3711 giveup_current_region();
3712 } else {
3713 move_finger_to(new_finger);
3714 }
3708 } 3715 }
3709 } 3716 }
3710 // At this point we have either completed iterating over the 3717 // At this point we have either completed iterating over the
3711 // region we were holding on to, or we have aborted. 3718 // region we were holding on to, or we have aborted.
3712 3719