# HG changeset patch # User rkennke # Date 1523473365 -7200 # Wed Apr 11 21:02:45 2018 +0200 # Node ID b24198947fdd93b3dff6d3641713c7a82c34516d # Parent 6a880e57685653c68836eb59ef2ba19ed313e6d3 8201442: objArrayOopDesc::atomic_compare_exchange_oop() must use obj+offset in HeapAccess call diff --git a/src/hotspot/share/oops/objArrayOop.cpp b/src/hotspot/share/oops/objArrayOop.cpp --- a/src/hotspot/share/oops/objArrayOop.cpp +++ b/src/hotspot/share/oops/objArrayOop.cpp @@ -31,13 +31,13 @@ oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value, oop compare_value) { - volatile HeapWord* dest; + size_t offs; if (UseCompressedOops) { - dest = (HeapWord*)obj_at_addr(index); + offs = objArrayOopDesc::obj_at_offset(index); } else { - dest = (HeapWord*)obj_at_addr(index); + offs = objArrayOopDesc::obj_at_offset(index); } - return HeapAccess<>::oop_atomic_cmpxchg(exchange_value, dest, compare_value); + return HeapAccess<>::oop_atomic_cmpxchg_at(exchange_value, as_oop(), offs, compare_value); } Klass* objArrayOopDesc::element_klass() {