src/share/vm/ci/ciInstanceKlass.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/ci/ciInstanceKlass.cpp Tue Feb 10 09:58:17 2015
--- new/src/share/vm/ci/ciInstanceKlass.cpp Tue Feb 10 09:58:17 2015
*** 499,534 ****
--- 499,533 ----
}
assert(fields->length() == flen, "sanity");
return fields;
}
! void ciInstanceKlass::compute_injected_fields_helper() {
! 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;
! _has_injected_fields++;
break;
! return true;
}
+ return false;
}
! bool ciInstanceKlass::compute_injected_fields() {
assert(_has_injected_fields == -1, "shouldn't be initialized yet");
! 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;
return true;
}
_has_injected_fields = 0;
+ } else {
GUARDED_VM_ENTRY({
! has_injected_fields = compute_injected_fields_helper() ? 1 : 0;
});
return _has_injected_fields > 0 ? true : false;
+ }
+ // 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