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