< prev index next >
src/share/vm/gc/g1/g1EvacFailure.cpp
Print this page
rev 12906 : [mq]: gc_interface
*** 37,62 ****
class UpdateRSetDeferred : public OopsInHeapRegionClosure {
private:
G1CollectedHeap* _g1;
DirtyCardQueue *_dcq;
! G1SATBCardTableModRefBS* _ct_bs;
public:
UpdateRSetDeferred(DirtyCardQueue* dcq) :
! _g1(G1CollectedHeap::heap()), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq) {}
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
virtual void do_oop( oop* p) { do_oop_work(p); }
template <class T> void do_oop_work(T* p) {
assert(_from->is_in_reserved(p), "paranoia");
assert(!_from->is_survivor(), "Unexpected evac failure in survivor region");
if (!_from->is_in_reserved(oopDesc::load_decode_heap_oop(p))) {
! size_t card_index = _ct_bs->index_for(p);
! if (_ct_bs->mark_card_deferred(card_index)) {
! _dcq->enqueue((jbyte*)_ct_bs->byte_for_index(card_index));
}
}
}
};
--- 37,62 ----
class UpdateRSetDeferred : public OopsInHeapRegionClosure {
private:
G1CollectedHeap* _g1;
DirtyCardQueue *_dcq;
! G1CardTable* _ct;
public:
UpdateRSetDeferred(DirtyCardQueue* dcq) :
! _g1(G1CollectedHeap::heap()), _ct(_g1->g1_card_table()), _dcq(dcq) {}
virtual void do_oop(narrowOop* p) { do_oop_work(p); }
virtual void do_oop( oop* p) { do_oop_work(p); }
template <class T> void do_oop_work(T* p) {
assert(_from->is_in_reserved(p), "paranoia");
assert(!_from->is_survivor(), "Unexpected evac failure in survivor region");
if (!_from->is_in_reserved(oopDesc::load_decode_heap_oop(p))) {
! size_t card_index = _ct->index_for(p);
! if (_ct->mark_card_deferred(card_index)) {
! _dcq->enqueue((jbyte*)_ct->byte_for_index(card_index));
}
}
}
};
< prev index next >