src/share/vm/ci/ciInstanceKlass.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/ci/ciInstanceKlass.cpp
src/share/vm/ci/ciInstanceKlass.cpp
Print this page
rev 7840 : 8071821: Assert failed in UnexpectedDeoptimizationTest.java
Summary: assert fires in case of concurrent initialization of ciInstanceKlass::_has_injected_fields
Reviewed-by:
*** 499,534 ****
}
assert(fields->length() == flen, "sanity");
return fields;
}
! void ciInstanceKlass::compute_injected_fields_helper() {
ASSERT_IN_VM;
InstanceKlass* k = get_instanceKlass();
for (InternalFieldStream fs(k); !fs.done(); fs.next()) {
if (fs.access_flags().is_static()) continue;
! _has_injected_fields++;
! break;
}
}
! bool ciInstanceKlass::compute_injected_fields() {
! assert(_has_injected_fields == -1, "shouldn't be initialized yet");
assert(is_loaded(), "must be loaded");
if (super() != NULL && super()->has_injected_fields()) {
! _has_injected_fields = 1;
! return true;
! }
!
! _has_injected_fields = 0;
GUARDED_VM_ENTRY({
! compute_injected_fields_helper();
});
!
! return _has_injected_fields > 0 ? true : false;
}
// ------------------------------------------------------------------
// ciInstanceKlass::find_method
//
--- 499,533 ----
}
assert(fields->length() == flen, "sanity");
return fields;
}
! bool ciInstanceKlass::compute_injected_fields_helper() {
ASSERT_IN_VM;
InstanceKlass* k = get_instanceKlass();
for (InternalFieldStream fs(k); !fs.done(); fs.next()) {
if (fs.access_flags().is_static()) continue;
! return true;
}
+ return false;
}
! void ciInstanceKlass::compute_injected_fields() {
assert(is_loaded(), "must be loaded");
+ int has_injected_fields = 0;
if (super() != NULL && super()->has_injected_fields()) {
! has_injected_fields = 1;
! } else {
GUARDED_VM_ENTRY({
! has_injected_fields = compute_injected_fields_helper() ? 1 : 0;
});
! }
! // may be concurrently initialized for shared ciInstanceKlass objects
! assert(_has_injected_fields == -1 || _has_injected_fields == has_injected_fields, "broken concurrent initialization");
! _has_injected_fields = has_injected_fields;
}
// ------------------------------------------------------------------
// ciInstanceKlass::find_method
//
src/share/vm/ci/ciInstanceKlass.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File