src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp
Print this page
rev 6719 : imported patch fast-reclaim-main-patch
rev 6721 : [mq]: fixes1
rev 6722 : [mq]: fixes-mikael2
*** 50,69 ****
// Although we never intentionally push references outside of the collection
// set, due to (benign) races in the claim mechanism during RSet scanning more
// than one thread might claim the same card. So the same card may be
// processed multiple times. So redo this check.
! if (_g1h->is_in_cset_or_humongous(obj)) {
oop forwardee;
if (obj->is_forwarded()) {
forwardee = obj->forwardee();
} else {
forwardee = copy_to_survivor_space(obj);
}
- if (forwardee != NULL) {
oopDesc::encode_store_heap_oop(p, forwardee);
! }
}
assert(obj != NULL, "Must be");
update_rs(from, p, queue_num());
}
--- 50,73 ----
// Although we never intentionally push references outside of the collection
// set, due to (benign) races in the claim mechanism during RSet scanning more
// than one thread might claim the same card. So the same card may be
// processed multiple times. So redo this check.
! G1CollectedHeap::in_cset_state_t in_cset_state = _g1h->in_cset_state(obj);
! if (in_cset_state == G1CollectedHeap::InCSet) {
oop forwardee;
if (obj->is_forwarded()) {
forwardee = obj->forwardee();
} else {
forwardee = copy_to_survivor_space(obj);
}
oopDesc::encode_store_heap_oop(p, forwardee);
! } else if (in_cset_state == G1CollectedHeap::IsHumongous) {
! _g1h->set_humongous_is_live(obj);
! } else {
! assert(in_cset_state == G1CollectedHeap::InNeither,
! err_msg("In_cset_state must be InNeither here, but is %d", in_cset_state));
}
assert(obj != NULL, "Must be");
update_rs(from, p, queue_num());
}