< prev index next >
src/hotspot/share/prims/jvmtiEnv.cpp
Print this page
*** 1712,1728 ****
// It's fine to update the thread state here because no JVMTI events
// shall be posted for this PopFrame.
// It is only safe to perform the direct operation on the current
! // thread. All other usage needs to use a vm-safepoint-op for safety.
if (java_thread == JavaThread::current()) {
state->update_for_pop_top_frame();
} else {
! VM_UpdateForPopTopFrame op(state);
! VMThread::execute(&op);
! jvmtiError err = op.result();
if (err != JVMTI_ERROR_NONE) {
return err;
}
}
--- 1712,1728 ----
// It's fine to update the thread state here because no JVMTI events
// shall be posted for this PopFrame.
// It is only safe to perform the direct operation on the current
! // thread. All other usage needs to use a handshake for safety.
if (java_thread == JavaThread::current()) {
state->update_for_pop_top_frame();
} else {
! UpdateForPopTopFrameClosure op(state);
! bool executed = Handshake::execute_direct(&op, java_thread);
! jvmtiError err = executed ? op.result() : JVMTI_ERROR_THREAD_NOT_ALIVE;
if (err != JVMTI_ERROR_NONE) {
return err;
}
}
*** 1798,1810 ****
// thread. All other usage needs to use a vm-safepoint-op for safety.
if (java_thread == JavaThread::current()) {
int frame_number = state->count_frames() - depth;
state->env_thread_state(this)->set_frame_pop(frame_number);
} else {
! VM_SetFramePop op(this, state, depth);
! VMThread::execute(&op);
! err = op.result();
}
return err;
} /* end NotifyFramePop */
--- 1798,1810 ----
// thread. All other usage needs to use a vm-safepoint-op for safety.
if (java_thread == JavaThread::current()) {
int frame_number = state->count_frames() - depth;
state->env_thread_state(this)->set_frame_pop(frame_number);
} else {
! SetFramePopClosure op(this, state, depth);
! bool executed = Handshake::execute_direct(&op, java_thread);
! err = executed ? op.result() : JVMTI_ERROR_THREAD_NOT_ALIVE;
}
return err;
} /* end NotifyFramePop */
< prev index next >