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