Top


定義場所(file name)

hotspot/src/share/vm/prims/jvmtiThreadState.cpp

名前(function name)

void JvmtiThreadState::process_pending_step_for_earlyret() {

本体部(body)

  {- -------------------------------------------
  (1) 
      ---------------------------------------- -}

      // We are single stepping as the last part of the ForceEarlyReturn
      // dance so we have some house keeping to do.

      if (is_earlyret_pending()) {
        // If the earlyret_state field is not earlyret_inactive, then
        // we missed all of the earlyret_field cleanup points:
        //
        // - remove_activation() was not called
        //   (did not get suspended in a call_vm() family call and did
        //   not complete a call_vm() family call on the way here)
        //
        // One legitimate way for us to miss all the cleanup points is
        // if we got here right after handling a compiled return. If that
        // is the case, then we consider our return from compiled code to
        // complete the ForceEarlyReturn request and we clear the condition.
        clr_earlyret_pending();
        set_earlyret_oop(NULL);
        clr_earlyret_value();
      }

  {- -------------------------------------------
  (1) JvmtiThreadState::clr_pending_step_for_earlyret() を呼んで
      この JvmtiThreadState 中の
      ---------------------------------------- -}

      // clearing the flag indicates we are done with
      // the ForceEarlyReturn() dance
      clr_pending_step_for_earlyret();

  {- -------------------------------------------
  (1) 
      ---------------------------------------- -}

      // If step is pending for earlyret then it may not be a repeat step.
      // The new_bci and method_id is same as current_bci and current
      // method_id after earlyret and step for recursive calls.
      // Force the step by clearing the last location.
      JvmtiEnvThreadStateIterator it(this);
      for (JvmtiEnvThreadState* ets = it.first(); ets != NULL; ets = it.next(ets)) {
        ets->clear_current_location();
      }
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.