8029381: assert(is_method_type()) failed: bad cast
Access to method_type and appendix from constant pool (cpcache) needs to be guarded by is_f1_null() because of racy update/initialization. Reviewed-by: kvn, coleenp, jrose
This commit is contained in:
parent
bdb8050bbf
commit
23d6ad76d7
@ -407,7 +407,7 @@ Method* ConstantPoolCacheEntry::method_if_resolved(constantPoolHandle cpool) {
|
|||||||
|
|
||||||
|
|
||||||
oop ConstantPoolCacheEntry::appendix_if_resolved(constantPoolHandle cpool) {
|
oop ConstantPoolCacheEntry::appendix_if_resolved(constantPoolHandle cpool) {
|
||||||
if (is_f1_null() || !has_appendix())
|
if (!has_appendix())
|
||||||
return NULL;
|
return NULL;
|
||||||
const int ref_index = f2_as_index() + _indy_resolved_references_appendix_offset;
|
const int ref_index = f2_as_index() + _indy_resolved_references_appendix_offset;
|
||||||
objArrayOop resolved_references = cpool->resolved_references();
|
objArrayOop resolved_references = cpool->resolved_references();
|
||||||
@ -416,7 +416,7 @@ oop ConstantPoolCacheEntry::appendix_if_resolved(constantPoolHandle cpool) {
|
|||||||
|
|
||||||
|
|
||||||
oop ConstantPoolCacheEntry::method_type_if_resolved(constantPoolHandle cpool) {
|
oop ConstantPoolCacheEntry::method_type_if_resolved(constantPoolHandle cpool) {
|
||||||
if (is_f1_null() || !has_method_type())
|
if (!has_method_type())
|
||||||
return NULL;
|
return NULL;
|
||||||
const int ref_index = f2_as_index() + _indy_resolved_references_method_type_offset;
|
const int ref_index = f2_as_index() + _indy_resolved_references_method_type_offset;
|
||||||
objArrayOop resolved_references = cpool->resolved_references();
|
objArrayOop resolved_references = cpool->resolved_references();
|
||||||
|
@ -348,8 +348,8 @@ class ConstantPoolCacheEntry VALUE_OBJ_CLASS_SPEC {
|
|||||||
bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; }
|
bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; }
|
||||||
bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; }
|
bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; }
|
||||||
bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; }
|
bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; }
|
||||||
bool has_appendix() const { return (_flags & (1 << has_appendix_shift)) != 0; }
|
bool has_appendix() const { return (!is_f1_null()) && (_flags & (1 << has_appendix_shift)) != 0; }
|
||||||
bool has_method_type() const { return (_flags & (1 << has_method_type_shift)) != 0; }
|
bool has_method_type() const { return (!is_f1_null()) && (_flags & (1 << has_method_type_shift)) != 0; }
|
||||||
bool is_method_entry() const { return (_flags & (1 << is_field_entry_shift)) == 0; }
|
bool is_method_entry() const { return (_flags & (1 << is_field_entry_shift)) == 0; }
|
||||||
bool is_field_entry() const { return (_flags & (1 << is_field_entry_shift)) != 0; }
|
bool is_field_entry() const { return (_flags & (1 << is_field_entry_shift)) != 0; }
|
||||||
bool is_byte() const { return flag_state() == btos; }
|
bool is_byte() const { return flag_state() == btos; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user