8185296: java_lang_Class::array_klass should be array_klass_acquire
Reviewed-by: eosterlund, kbarrett
This commit is contained in:
parent
de829e151b
commit
a9fb2dde3f
hotspot/src/share/vm
@ -1082,8 +1082,8 @@ const char* java_lang_Class::as_external_name(oop java_class) {
|
||||
return name;
|
||||
}
|
||||
|
||||
Klass* java_lang_Class::array_klass(oop java_class) {
|
||||
Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset));
|
||||
Klass* java_lang_Class::array_klass_acquire(oop java_class) {
|
||||
Klass* k = ((Klass*)java_class->metadata_field_acquire(_array_klass_offset));
|
||||
assert(k == NULL || k->is_klass() && k->is_array_klass(), "should be array klass");
|
||||
return k;
|
||||
}
|
||||
|
@ -236,7 +236,7 @@ class java_lang_Class : AllStatic {
|
||||
static BasicType primitive_type(oop java_class);
|
||||
static oop primitive_mirror(BasicType t);
|
||||
// JVM_NewArray support
|
||||
static Klass* array_klass(oop java_class);
|
||||
static Klass* array_klass_acquire(oop java_class);
|
||||
static void release_set_array_klass(oop java_class, Klass* klass);
|
||||
// compiler support for class operations
|
||||
static int klass_offset_in_bytes() { return _klass_offset; }
|
||||
|
@ -2949,7 +2949,7 @@ void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
|
||||
st->print(BULLET"fake entry for mirror: ");
|
||||
mirrored_klass->print_value_on_maybe_null(st);
|
||||
st->cr();
|
||||
Klass* array_klass = java_lang_Class::array_klass(obj);
|
||||
Klass* array_klass = java_lang_Class::array_klass_acquire(obj);
|
||||
st->print(BULLET"fake entry for array: ");
|
||||
array_klass->print_value_on_maybe_null(st);
|
||||
st->cr();
|
||||
|
@ -204,6 +204,7 @@ class oopDesc {
|
||||
inline Metadata* metadata_field(int offset) const;
|
||||
inline void metadata_field_put(int offset, Metadata* value);
|
||||
|
||||
inline Metadata* metadata_field_acquire(int offset) const;
|
||||
inline void release_metadata_field_put(int offset, Metadata* value);
|
||||
|
||||
inline jbyte byte_field(int offset) const;
|
||||
|
@ -446,6 +446,10 @@ void oopDesc::obj_field_put_volatile(int offset, oop value) {
|
||||
Metadata* oopDesc::metadata_field(int offset) const { return *metadata_field_addr(offset); }
|
||||
void oopDesc::metadata_field_put(int offset, Metadata* value) { *metadata_field_addr(offset) = value; }
|
||||
|
||||
Metadata* oopDesc::metadata_field_acquire(int offset) const {
|
||||
return (Metadata*)OrderAccess::load_ptr_acquire(metadata_field_addr(offset));
|
||||
}
|
||||
|
||||
void oopDesc::release_metadata_field_put(int offset, Metadata* value) {
|
||||
OrderAccess::release_store_ptr(metadata_field_addr(offset), value);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user