< prev index next >

src/hotspot/share/oops/instanceKlass.cpp

Print this page
rev 56206 : [mq]: 8226705-v2

*** 2971,2991 **** } #endif // INCLUDE_JVMTI // On-stack replacement stuff void InstanceKlass::add_osr_nmethod(nmethod* n) { #ifndef PRODUCT if (TieredCompilation) { nmethod * prev = lookup_osr_nmethod(n->method(), n->osr_entry_bci(), n->comp_level(), true); assert(prev == NULL || !prev->is_in_use(), "redundunt OSR recompilation detected. memory leak in CodeCache!"); } #endif // only one compilation can be active { - // This is a short non-blocking critical region, so the no safepoint check is ok. - MutexLocker ml(OsrList_lock, Mutex::_no_safepoint_check_flag); assert(n->is_osr_method(), "wrong kind of nmethod"); n->set_osr_link(osr_nmethods_head()); set_osr_nmethods_head(n); // Raise the highest osr level if necessary if (TieredCompilation) { --- 2971,2990 ---- } #endif // INCLUDE_JVMTI // On-stack replacement stuff void InstanceKlass::add_osr_nmethod(nmethod* n) { + assert_lock_strong(CompiledMethod_lock); #ifndef PRODUCT if (TieredCompilation) { nmethod * prev = lookup_osr_nmethod(n->method(), n->osr_entry_bci(), n->comp_level(), true); assert(prev == NULL || !prev->is_in_use(), "redundunt OSR recompilation detected. memory leak in CodeCache!"); } #endif // only one compilation can be active { assert(n->is_osr_method(), "wrong kind of nmethod"); n->set_osr_link(osr_nmethods_head()); set_osr_nmethods_head(n); // Raise the highest osr level if necessary if (TieredCompilation) {
*** 3006,3016 **** } // Remove osr nmethod from the list. Return true if found and removed. bool InstanceKlass::remove_osr_nmethod(nmethod* n) { // This is a short non-blocking critical region, so the no safepoint check is ok. ! MutexLocker ml(OsrList_lock, Mutex::_no_safepoint_check_flag); assert(n->is_osr_method(), "wrong kind of nmethod"); nmethod* last = NULL; nmethod* cur = osr_nmethods_head(); int max_level = CompLevel_none; // Find the max comp level excluding n Method* m = n->method(); --- 3005,3016 ---- } // Remove osr nmethod from the list. Return true if found and removed. bool InstanceKlass::remove_osr_nmethod(nmethod* n) { // This is a short non-blocking critical region, so the no safepoint check is ok. ! MutexLocker ml(CompiledMethod_lock->owned_by_self() ? NULL : CompiledMethod_lock ! , Mutex::_no_safepoint_check_flag); assert(n->is_osr_method(), "wrong kind of nmethod"); nmethod* last = NULL; nmethod* cur = osr_nmethods_head(); int max_level = CompLevel_none; // Find the max comp level excluding n Method* m = n->method();
*** 3049,3060 **** } return found; } int InstanceKlass::mark_osr_nmethods(const Method* m) { ! // This is a short non-blocking critical region, so the no safepoint check is ok. ! MutexLocker ml(OsrList_lock, Mutex::_no_safepoint_check_flag); nmethod* osr = osr_nmethods_head(); int found = 0; while (osr != NULL) { assert(osr->is_osr_method(), "wrong kind of nmethod found in chain"); if (osr->method() == m) { --- 3049,3060 ---- } return found; } int InstanceKlass::mark_osr_nmethods(const Method* m) { ! MutexLocker ml(CompiledMethod_lock->owned_by_self() ? NULL : CompiledMethod_lock, ! Mutex::_no_safepoint_check_flag); nmethod* osr = osr_nmethods_head(); int found = 0; while (osr != NULL) { assert(osr->is_osr_method(), "wrong kind of nmethod found in chain"); if (osr->method() == m) {
*** 3065,3076 **** } return found; } nmethod* InstanceKlass::lookup_osr_nmethod(const Method* m, int bci, int comp_level, bool match_level) const { ! // This is a short non-blocking critical region, so the no safepoint check is ok. ! MutexLocker ml(OsrList_lock, Mutex::_no_safepoint_check_flag); nmethod* osr = osr_nmethods_head(); nmethod* best = NULL; while (osr != NULL) { assert(osr->is_osr_method(), "wrong kind of nmethod found in chain"); // There can be a time when a c1 osr method exists but we are waiting --- 3065,3076 ---- } return found; } nmethod* InstanceKlass::lookup_osr_nmethod(const Method* m, int bci, int comp_level, bool match_level) const { ! MutexLocker ml(CompiledMethod_lock->owned_by_self() ? NULL : CompiledMethod_lock, ! Mutex::_no_safepoint_check_flag); nmethod* osr = osr_nmethods_head(); nmethod* best = NULL; while (osr != NULL) { assert(osr->is_osr_method(), "wrong kind of nmethod found in chain"); // There can be a time when a c1 osr method exists but we are waiting
< prev index next >