6767587: missing call to make_not_entrant after deoptimizing for patching volatiles
authornever
Fri Dec 12 19:53:25 2008 -0800 (15 months ago)
changeset 483ac8fe14c93e4
parent 482ffe19141e312
child 484a738a625039a
6767587: missing call to make_not_entrant after deoptimizing for patching volatiles
Reviewed-by: rasbold, kvn
src/share/vm/c1/c1_Runtime1.cpp
--- a/src/share/vm/c1/c1_Runtime1.cpp Fri Dec 12 15:37:46 2008 -0800
+++ b/src/share/vm/c1/c1_Runtime1.cpp Fri Dec 12 19:53:25 2008 -0800
@@ -842,6 +842,13 @@ JRT_ENTRY(void, Runtime1::patch_code(Jav
if (TracePatching) {
tty->print_cr("Deoptimizing for patching volatile field reference");
}
+ // It's possible the nmethod was invalidated in the last
+ // safepoint, but if it's still alive then make it not_entrant.
+ nmethod* nm = CodeCache::find_nmethod(caller_frame.pc());
+ if (nm != NULL) {
+ nm->make_not_entrant();
+ }
+
VM_DeoptimizeFrame deopt(thread, caller_frame.id());
VMThread::execute(&deopt);