8144315: update_rs is passed wrong object
Reviewed-by: jmasa, kbarrett
This commit is contained in:
parent
9e9eac05ae
commit
ee7076bdd1
@ -40,14 +40,13 @@ template <class T> void G1ParScanThreadState::do_oop_evac(T* p, HeapRegion* from
|
||||
// processed multiple times. So redo this check.
|
||||
const InCSetState in_cset_state = _g1h->in_cset_state(obj);
|
||||
if (in_cset_state.is_in_cset()) {
|
||||
oop forwardee;
|
||||
markOop m = obj->mark();
|
||||
if (m->is_marked()) {
|
||||
forwardee = (oop) m->decode_pointer();
|
||||
obj = (oop) m->decode_pointer();
|
||||
} else {
|
||||
forwardee = copy_to_survivor_space(in_cset_state, obj, m);
|
||||
obj = copy_to_survivor_space(in_cset_state, obj, m);
|
||||
}
|
||||
oopDesc::encode_store_heap_oop(p, forwardee);
|
||||
oopDesc::encode_store_heap_oop(p, obj);
|
||||
} else if (in_cset_state.is_humongous()) {
|
||||
_g1h->set_humongous_is_live(obj);
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user