Mercurial > hg > truffle
comparison src/share/vm/c1/c1_Runtime1.cpp @ 4048:cec1757a0134
7102657: JSR 292: C1 deoptimizes unlinked invokedynamic call sites infinitely
Reviewed-by: never, bdelsart
author | twisti |
---|---|
date | Thu, 27 Oct 2011 04:43:37 -0700 |
parents | c124e2e7463e |
children | 04b9a2566eec 20334ed5ed3c |
comparison
equal
deleted
inserted
replaced
4047:d8cb48376797 | 4048:cec1757a0134 |
---|---|
677 // When using fast locking, the compiled code has already tried the fast case | 677 // When using fast locking, the compiled code has already tried the fast case |
678 ObjectSynchronizer::slow_exit(obj, lock->lock(), THREAD); | 678 ObjectSynchronizer::slow_exit(obj, lock->lock(), THREAD); |
679 } else { | 679 } else { |
680 ObjectSynchronizer::fast_exit(obj, lock->lock(), THREAD); | 680 ObjectSynchronizer::fast_exit(obj, lock->lock(), THREAD); |
681 } | 681 } |
682 JRT_END | |
683 | |
684 // Cf. OptoRuntime::deoptimize_caller_frame | |
685 JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread)) | |
686 // Called from within the owner thread, so no need for safepoint | |
687 RegisterMap reg_map(thread, false); | |
688 frame stub_frame = thread->last_frame(); | |
689 assert(stub_frame.is_runtime_frame(), "sanity check"); | |
690 frame caller_frame = stub_frame.sender(®_map); | |
691 | |
692 // We are coming from a compiled method; check this is true. | |
693 assert(CodeCache::find_nmethod(caller_frame.pc()) != NULL, "sanity"); | |
694 | |
695 // Deoptimize the caller frame. | |
696 Deoptimization::deoptimize_frame(thread, caller_frame.id()); | |
697 | |
698 // Return to the now deoptimized frame. | |
682 JRT_END | 699 JRT_END |
683 | 700 |
684 | 701 |
685 static klassOop resolve_field_return_klass(methodHandle caller, int bci, TRAPS) { | 702 static klassOop resolve_field_return_klass(methodHandle caller, int bci, TRAPS) { |
686 Bytecode_field field_access(caller, bci); | 703 Bytecode_field field_access(caller, bci); |