src/share/vm/c1/c1_Runtime1.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/c1/c1_Runtime1.cpp	Tue May  6 15:13:00 2014
--- new/src/share/vm/c1/c1_Runtime1.cpp	Tue May  6 15:12:59 2014

*** 683,705 **** --- 683,712 ---- ObjectSynchronizer::fast_exit(obj, lock->lock(), THREAD); } JRT_END // Cf. OptoRuntime::deoptimize_caller_frame ! JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread, jint trap_request)) // Called from within the owner thread, so no need for safepoint RegisterMap reg_map(thread, false); frame stub_frame = thread->last_frame(); assert(stub_frame.is_runtime_frame(), "sanity check"); frame caller_frame = stub_frame.sender(&reg_map); // We are coming from a compiled method; check this is true. assert(CodeCache::find_nmethod(caller_frame.pc()) != NULL, "sanity"); + Deoptimization::DeoptAction action = Deoptimization::trap_request_action(trap_request); + + if (action == Deoptimization::Action_make_not_entrant) { + nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); + if (nm != NULL) { + nm->make_not_entrant(); + } + } // Deoptimize the caller frame. Deoptimization::deoptimize_frame(thread, caller_frame.id()); // Return to the now deoptimized frame. JRT_END static Klass* resolve_field_return_klass(methodHandle caller, int bci, TRAPS) {

src/share/vm/c1/c1_Runtime1.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File