8144315: update_rs is passed wrong object

Reviewed-by: jmasa, kbarrett
This commit is contained in:
Erik Helin 2015-12-02 10:02:44 +01:00
parent 9e9eac05ae
commit ee7076bdd1

View File

@ -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 {