< prev index next >
src/hotspot/share/prims/jvmtiEnvBase.cpp
Print this page
*** 814,830 ****
jint start_depth, jint max_count,
jvmtiFrameInfo* frame_buffer, jint* count_ptr) {
#ifdef ASSERT
uint32_t debug_bits = 0;
#endif
assert((SafepointSynchronize::is_at_safepoint() ||
! java_thread->is_thread_fully_suspended(false, &debug_bits)),
"at safepoint or target thread is suspended");
int count = 0;
if (java_thread->has_last_Java_frame()) {
RegisterMap reg_map(java_thread);
- Thread* current_thread = Thread::current();
ResourceMark rm(current_thread);
javaVFrame *jvf = java_thread->last_java_vframe(®_map);
HandleMark hm(current_thread);
if (start_depth != 0) {
if (start_depth > 0) {
--- 814,832 ----
jint start_depth, jint max_count,
jvmtiFrameInfo* frame_buffer, jint* count_ptr) {
#ifdef ASSERT
uint32_t debug_bits = 0;
#endif
+ Thread* current_thread = Thread::current();
assert((SafepointSynchronize::is_at_safepoint() ||
! java_thread->is_thread_fully_suspended(false, &debug_bits) ||
! current_thread == java_thread ||
! (current_thread->is_Java_thread() && (current_thread == java_thread->active_handshaker()))),
"at safepoint or target thread is suspended");
int count = 0;
if (java_thread->has_last_Java_frame()) {
RegisterMap reg_map(java_thread);
ResourceMark rm(current_thread);
javaVFrame *jvf = java_thread->last_java_vframe(®_map);
HandleMark hm(current_thread);
if (start_depth != 0) {
if (start_depth > 0) {
*** 897,910 ****
JvmtiEnvBase::get_frame_location(JavaThread *java_thread, jint depth,
jmethodID* method_ptr, jlocation* location_ptr) {
#ifdef ASSERT
uint32_t debug_bits = 0;
#endif
assert((SafepointSynchronize::is_at_safepoint() ||
! java_thread->is_thread_fully_suspended(false, &debug_bits)),
"at safepoint or target thread is suspended");
- Thread* current_thread = Thread::current();
ResourceMark rm(current_thread);
vframe *vf = vframeFor(java_thread, depth);
if (vf == NULL) {
return JVMTI_ERROR_NO_MORE_FRAMES;
--- 899,914 ----
JvmtiEnvBase::get_frame_location(JavaThread *java_thread, jint depth,
jmethodID* method_ptr, jlocation* location_ptr) {
#ifdef ASSERT
uint32_t debug_bits = 0;
#endif
+ Thread* current_thread = Thread::current();
assert((SafepointSynchronize::is_at_safepoint() ||
! java_thread->is_thread_fully_suspended(false, &debug_bits) ||
! current_thread == java_thread ||
! (current_thread->is_Java_thread() && (current_thread == java_thread->active_handshaker()))),
"at safepoint or target thread is suspended");
ResourceMark rm(current_thread);
vframe *vf = vframeFor(java_thread, depth);
if (vf == NULL) {
return JVMTI_ERROR_NO_MORE_FRAMES;
*** 1514,1549 ****
GetCurrentContendedMonitorClosure::do_thread(Thread *target) {
_result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread, (JavaThread *)target, _owned_monitor_ptr);
}
void
! VM_GetStackTrace::doit() {
! _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
! ThreadsListHandle tlh;
! if (_java_thread != NULL && tlh.includes(_java_thread)
! && !_java_thread->is_exiting() && _java_thread->threadObj() != NULL) {
! _result = ((JvmtiEnvBase *)_env)->get_stack_trace(_java_thread,
_start_depth, _max_count,
_frame_buffer, _count_ptr);
}
}
void
! VM_GetFrameCount::doit() {
! _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
! JavaThread* jt = _state->get_thread();
! ThreadsListHandle tlh;
! if (jt != NULL && tlh.includes(jt) && !jt->is_exiting() && jt->threadObj() != NULL) {
_result = ((JvmtiEnvBase*)_env)->get_frame_count(_state, _count_ptr);
- }
}
void
! VM_GetFrameLocation::doit() {
! _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
! ThreadsListHandle tlh;
! if (_java_thread != NULL && tlh.includes(_java_thread)
! && !_java_thread->is_exiting() && _java_thread->threadObj() != NULL) {
! _result = ((JvmtiEnvBase*)_env)->get_frame_location(_java_thread, _depth,
_method_ptr, _location_ptr);
- }
}
--- 1518,1556 ----
GetCurrentContendedMonitorClosure::do_thread(Thread *target) {
_result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread, (JavaThread *)target, _owned_monitor_ptr);
}
void
! GetStackTraceClosure::do_thread(Thread *target) {
! assert(target->is_Java_thread(), "invaliant");
! JavaThread *target_javathread = (JavaThread *)target;
! _result = ((JvmtiEnvBase *)_env)->get_stack_trace(target_javathread,
_start_depth, _max_count,
_frame_buffer, _count_ptr);
+ if (_needs_thread_state) {
+ oop target_oop = target_javathread->threadObj();
+ assert(target_oop != NULL, "invaliant");
+
+ _state = (jint)java_lang_Thread::get_thread_status(target_oop);
+ if (target_javathread->is_ext_suspended() || target_javathread->is_external_suspend()) {
+ _state |= JVMTI_THREAD_STATE_SUSPENDED;
+ }
+ if (target_javathread->thread_state() == _thread_in_native) {
+ _state |= JVMTI_THREAD_STATE_IN_NATIVE;
+ }
+ if (target_javathread->is_interrupted(false)) {
+ _state |= JVMTI_THREAD_STATE_INTERRUPTED;
+ }
}
}
void
! GetFrameCountClosure::do_thread(Thread *target) {
_result = ((JvmtiEnvBase*)_env)->get_frame_count(_state, _count_ptr);
}
void
! GetFrameLocationClosure::do_thread(Thread *target) {
! assert(target->is_Java_thread(), "invaliant");
! _result = ((JvmtiEnvBase*)_env)->get_frame_location((JavaThread *)target, _depth,
_method_ptr, _location_ptr);
}
< prev index next >