src/share/vm/runtime/vframeArray.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/runtime/vframeArray.cpp	Mon Jul  6 17:13:57 2009
--- new/src/share/vm/runtime/vframeArray.cpp	Mon Jul  6 17:13:57 2009

*** 42,51 **** --- 42,52 ---- // Copy the information from the compiled vframe to the // interpreter frame we will be creating to replace vf _method = vf->method(); _bci = vf->raw_bci(); + _restart = vf->is_restart(); int index; // Get the monitors off-stack
*** 153,164 **** --- 154,169 ---- if (raw_bci() == SynchronizationEntryBCI) { // We are deoptimizing while hanging in prologue code for synchronized method bcp = method()->bcp_from(0); // first byte code pc = Interpreter::deopt_entry(vtos, 0); // step = 0 since we don't skip current bytecode use_next_mdp = false; ! } else if (is_restart()) { // Must restart this instruction according to debuginfo bcp = method()->bcp_from(bci()); + pc = Interpreter::deopt_entry(vtos, 0); + use_next_mdp = false; + } else { //some of them may still restart according to Interpreter::continuation_for + bcp = method()->bcp_from(bci()); pc = Interpreter::continuation_for(method(), bcp, callee_parameters, is_top_frame, use_next_mdp); } assert(Bytecodes::is_defined(*bcp), "must be a valid bytecode"); // Monitorenter and pending exceptions:

src/share/vm/runtime/vframeArray.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File