< prev index next >

src/hotspot/share/oops/objArrayOop.cpp

Print this page
rev 49674 : 8201442: objArrayOopDesc::atomic_compare_exchange_oop() must use obj+offset in HeapAccess call

*** 29,45 **** #include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value, oop compare_value) { ! volatile HeapWord* dest; if (UseCompressedOops) { ! dest = (HeapWord*)obj_at_addr<narrowOop>(index); } else { ! dest = (HeapWord*)obj_at_addr<oop>(index); } ! return HeapAccess<>::oop_atomic_cmpxchg(exchange_value, dest, compare_value); } Klass* objArrayOopDesc::element_klass() { return ObjArrayKlass::cast(klass())->element_klass(); } --- 29,45 ---- #include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value, oop compare_value) { ! ptrdiff_t offs; if (UseCompressedOops) { ! offs = objArrayOopDesc::obj_at_offset<narrowOop>(index); } else { ! offs = objArrayOopDesc::obj_at_offset<oop>(index); } ! return HeapAccess<>::oop_atomic_cmpxchg_at(exchange_value, as_oop(), offs, compare_value); } Klass* objArrayOopDesc::element_klass() { return ObjArrayKlass::cast(klass())->element_klass(); }
< prev index next >