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