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