src/share/vm/c1/c1_Runtime1.cpp

Print this page
rev 5061 : imported patch nmethod_changes_original

*** 913,932 **** Deoptimization::deoptimize_frame(thread, caller_frame.id()); // Return to the now deoptimized frame. } - // If we are patching in a non-perm oop, make sure the nmethod - // is on the right list. - if (ScavengeRootsInCode && mirror.not_null() && mirror()->is_scavengable()) { - MutexLockerEx ml_code (CodeCache_lock, Mutex::_no_safepoint_check_flag); - nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); - guarantee(nm != NULL, "only nmethods can contain non-perm oops"); - if (!nm->on_scavenge_root_list()) - CodeCache::add_scavenge_root_nmethod(nm); - } - // Now copy code back { MutexLockerEx ml_patch (Patching_lock, Mutex::_no_safepoint_check_flag); // --- 913,922 ----
*** 1123,1132 **** --- 1113,1137 ---- NativeGeneralJump::insert_unconditional(instr_pc, being_initialized_entry); } } } } + + // If we are patching in a non-perm oop, make sure the nmethod + // is on the right list. + if (ScavengeRootsInCode && mirror.not_null() && mirror()->is_scavengable()) { + MutexLockerEx ml_code (CodeCache_lock, Mutex::_no_safepoint_check_flag); + nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); + guarantee(nm != NULL, "only nmethods can contain non-perm oops"); + if (!nm->on_scavenge_root_list()) { + CodeCache::add_scavenge_root_nmethod(nm); + } + + // Since we've patched some oops in the nmethod, + // (re)register it with the heap. + Universe::heap()->register_nmethod(nm); + } JRT_END // // Entry point for compiled code. We want to patch a nmethod. // We don't do a normal VM transition here because we want to