< prev index next >
src/share/vm/gc/g1/g1ConcurrentMark.cpp
Print this page
rev 13257 : [mq]: 8184346-cleanup-g1cmbitmap
rev 13258 : [mq]: 8184346-rkennke-review
rev 13259 : [mq]: 8184347-move-g1cmbitmap-into-own-files
rev 13261 : imported patch 8184348-merge-par_mark-and_gray_root
*** 1703,1722 ****
// This is very similar to G1CMTask::deal_with_reference, but with
// more relaxed requirements for the argument, so this must be more
// circumspect about treating the argument as an object.
void do_entry(void* entry) const {
_task->increment_refs_reached();
! HeapRegion* hr = _g1h->heap_region_containing(entry);
! if (entry < hr->next_top_at_mark_start()) {
! // Until we get here, we don't know whether entry refers to a valid
! // object; it could instead have been a stale reference.
! oop obj = static_cast<oop>(entry);
! assert(obj->is_oop(true /* ignore mark word */),
! "Invalid oop in SATB buffer: " PTR_FORMAT, p2i(obj));
_task->make_reference_grey(obj);
}
- }
public:
G1CMSATBBufferClosure(G1CMTask* task, G1CollectedHeap* g1h)
: _task(task), _g1h(g1h) { }
--- 1703,1715 ----
// This is very similar to G1CMTask::deal_with_reference, but with
// more relaxed requirements for the argument, so this must be more
// circumspect about treating the argument as an object.
void do_entry(void* entry) const {
_task->increment_refs_reached();
! oop const obj = static_cast<oop>(entry);
_task->make_reference_grey(obj);
}
public:
G1CMSATBBufferClosure(G1CMTask* task, G1CollectedHeap* g1h)
: _task(task), _g1h(g1h) { }
< prev index next >