# HG changeset patch # User rkennke # Date 1523475226 -7200 # Wed Apr 11 21:33:46 2018 +0200 # Node ID be2fb75d192af7b98cd8c096c59b2082698ebe3b # 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; + ptrdiff_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() {