comparison src/share/vm/runtime/deoptimization.cpp @ 1814:fd5d4527cdf5

6986270: guarantee(*bcp != Bytecodes::_monitorenter || exec_mode != Deoptimization::Unpack_exception) fails Summary: Propagate the compiler type of the deopting method to vframeArrayElement::unpack_on_stack() Reviewed-by: jrose, never
author iveresov
date Tue, 21 Sep 2010 13:38:35 -0700
parents d5d065957597
children ce6848d0666d
comparison
equal deleted inserted replaced
1813:c77e8f982901 1814:fd5d4527cdf5
122 frame stub_frame = thread->last_frame(); // Makes stack walkable as side effect 122 frame stub_frame = thread->last_frame(); // Makes stack walkable as side effect
123 RegisterMap map(thread, true); 123 RegisterMap map(thread, true);
124 RegisterMap dummy_map(thread, false); 124 RegisterMap dummy_map(thread, false);
125 // Now get the deoptee with a valid map 125 // Now get the deoptee with a valid map
126 frame deoptee = stub_frame.sender(&map); 126 frame deoptee = stub_frame.sender(&map);
127 // Set the deoptee nmethod
128 assert(thread->deopt_nmethod() == NULL, "Pending deopt!");
129 thread->set_deopt_nmethod(deoptee.cb()->as_nmethod_or_null());
127 130
128 // Create a growable array of VFrames where each VFrame represents an inlined 131 // Create a growable array of VFrames where each VFrame represents an inlined
129 // Java frame. This storage is allocated with the usual system arena. 132 // Java frame. This storage is allocated with the usual system arena.
130 assert(deoptee.is_compiled_frame(), "Wrong frame type"); 133 assert(deoptee.is_compiled_frame(), "Wrong frame type");
131 GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10); 134 GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10);
443 // Deallocate any resource creating in this routine and any ResourceObjs allocated 446 // Deallocate any resource creating in this routine and any ResourceObjs allocated
444 // inside the vframeArray (StackValueCollections) 447 // inside the vframeArray (StackValueCollections)
445 448
446 delete thread->deopt_mark(); 449 delete thread->deopt_mark();
447 thread->set_deopt_mark(NULL); 450 thread->set_deopt_mark(NULL);
451 thread->set_deopt_nmethod(NULL);
448 452
449 453
450 if (JvmtiExport::can_pop_frame()) { 454 if (JvmtiExport::can_pop_frame()) {
451 #ifndef CC_INTERP 455 #ifndef CC_INTERP
452 // Regardless of whether we entered this routine with the pending 456 // Regardless of whether we entered this routine with the pending