Mercurial > hg > truffle
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 |