< 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(&reg_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(&reg_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 >