src/share/vm/prims/jvmtiEnvBase.hpp

Print this page

        

*** 332,342 **** --- 332,394 ---- } JvmtiEnv* first() { return JvmtiEnvBase::head_environment(); } JvmtiEnv* next(JvmtiEnvBase* env) { return env->next_environment(); } }; + // VM operation to update for pop top frame. + class VM_UpdateForPopTopFrame : public VM_Operation { + private: + JvmtiThreadState* _state; + jvmtiError _result; + public: + VM_UpdateForPopTopFrame(JvmtiThreadState* state) { + _state = state; + _result = JVMTI_ERROR_NONE; + } + VMOp_Type type() const { return VMOp_UpdateForPopTopFrame; } + jvmtiError result() { return _result; } + void doit() { + JavaThread* jt = _state->get_thread(); + if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj() != NULL) { + _state->update_for_pop_top_frame(); + } else { + _result = JVMTI_ERROR_THREAD_NOT_ALIVE; + } + } + }; + + // VM operation to set frame pop. + class VM_SetFramePop : public VM_Operation { + private: + JvmtiEnv *_env; + JvmtiThreadState* _state; + jint _depth; + jvmtiError _result; + + public: + VM_SetFramePop(JvmtiEnv *env, JvmtiThreadState* state, jint depth) { + _env = env; + _state = state; + _depth = depth; + _result = JVMTI_ERROR_NONE; + } + bool allow_nested_vm_operations() const { return true; } + VMOp_Type type() const { return VMOp_SetFramePop; } + jvmtiError result() { return _result; } + void doit() { + JavaThread* jt = _state->get_thread(); + if (Threads::includes(jt) && !jt->is_exiting() && jt->threadObj() != NULL) { + int frame_number = _state->count_frames() - _depth; + _state->env_thread_state((JvmtiEnvBase*)_env)->set_frame_pop(frame_number); + } else { + _result = JVMTI_ERROR_THREAD_NOT_ALIVE; + } + } + }; + + // VM operation to get monitor information with stack depth. class VM_GetOwnedMonitorInfo : public VM_Operation { private: JvmtiEnv *_env; JavaThread* _calling_thread;