< prev index next >

src/hotspot/share/prims/jvmtiEnvBase.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 645,661 **** } jvmtiError ! JvmtiEnvBase::get_current_contended_monitor(JavaThread *calling_thread, JavaThread *java_thread, jobject *monitor_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"); oop obj = NULL; ObjectMonitor *mon = java_thread->current_waiting_monitor(); if (mon == NULL) { // thread is not doing an Object.wait() call mon = java_thread->current_pending_monitor(); --- 645,659 ---- } jvmtiError ! JvmtiEnvBase::get_current_contended_monitor(JavaThread *java_thread, jobject *monitor_ptr) { ! assert(!Thread::current()->is_VM_thread() && ! (Thread::current() == java_thread || ! Thread::current() == java_thread->active_handshaker()), ! "call by myself or at direct handshake"); oop obj = NULL; ObjectMonitor *mon = java_thread->current_waiting_monitor(); if (mon == NULL) { // thread is not doing an Object.wait() call mon = java_thread->current_pending_monitor();
*** 673,699 **** if (obj == NULL) { *monitor_ptr = NULL; } else { HandleMark hm; ! Handle hobj(Thread::current(), obj); ! *monitor_ptr = jni_reference(calling_thread, hobj); } return JVMTI_ERROR_NONE; } jvmtiError ! JvmtiEnvBase::get_owned_monitors(JavaThread *calling_thread, JavaThread* java_thread, GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list) { jvmtiError err = JVMTI_ERROR_NONE; ! #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"); if (java_thread->has_last_Java_frame()) { ResourceMark rm; HandleMark hm; RegisterMap reg_map(java_thread); --- 671,696 ---- if (obj == NULL) { *monitor_ptr = NULL; } else { HandleMark hm; ! JavaThread *current_jt = reinterpret_cast<JavaThread *>(JavaThread::current()); ! Handle hobj(current_jt, obj); ! *monitor_ptr = jni_reference(current_jt, hobj); } return JVMTI_ERROR_NONE; } jvmtiError ! JvmtiEnvBase::get_owned_monitors(JavaThread* java_thread, GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list) { jvmtiError err = JVMTI_ERROR_NONE; ! assert(!Thread::current()->is_VM_thread() && ! (Thread::current() == java_thread || ! Thread::current() == java_thread->active_handshaker()), ! "call by myself or at direct handshake"); if (java_thread->has_last_Java_frame()) { ResourceMark rm; HandleMark hm; RegisterMap reg_map(java_thread);
*** 701,720 **** int depth = 0; for (javaVFrame *jvf = java_thread->last_java_vframe(&reg_map); jvf != NULL; jvf = jvf->java_sender()) { if (MaxJavaStackTraceDepth == 0 || depth++ < MaxJavaStackTraceDepth) { // check for stack too deep // add locked objects for this frame into list ! err = get_locked_objects_in_frame(calling_thread, java_thread, jvf, owned_monitors_list, depth-1); if (err != JVMTI_ERROR_NONE) { return err; } } } } // Get off stack monitors. (e.g. acquired via jni MonitorEnter). ! JvmtiMonitorClosure jmc(java_thread, calling_thread, owned_monitors_list, this); ObjectSynchronizer::monitors_iterate(&jmc); err = jmc.error(); return err; } --- 698,717 ---- int depth = 0; for (javaVFrame *jvf = java_thread->last_java_vframe(&reg_map); jvf != NULL; jvf = jvf->java_sender()) { if (MaxJavaStackTraceDepth == 0 || depth++ < MaxJavaStackTraceDepth) { // check for stack too deep // add locked objects for this frame into list ! err = get_locked_objects_in_frame(JavaThread::current(), java_thread, jvf, owned_monitors_list, depth-1); if (err != JVMTI_ERROR_NONE) { return err; } } } } // Get off stack monitors. (e.g. acquired via jni MonitorEnter). ! JvmtiMonitorClosure jmc(java_thread, JavaThread::current(), owned_monitors_list, this); ObjectSynchronizer::monitors_iterate(&jmc); err = jmc.error(); return err; }
*** 1540,1567 **** _result = JVMTI_ERROR_THREAD_NOT_ALIVE; } } void ! VM_GetOwnedMonitorInfo::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_owned_monitors(_calling_thread, _java_thread, ! _owned_monitors_list); ! } } void ! VM_GetCurrentContendedMonitor::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_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr); ! } } void VM_GetStackTrace::doit() { _result = JVMTI_ERROR_THREAD_NOT_ALIVE; --- 1537,1553 ---- _result = JVMTI_ERROR_THREAD_NOT_ALIVE; } } void ! GetOwnedMonitorInfoClosure::do_thread(Thread *target) { ! _result = ((JvmtiEnvBase *)_env)->get_owned_monitors((JavaThread *)target, _owned_monitors_list); } void ! GetCurrentContendedMonitorClosure::do_thread(Thread *target) { ! _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor((JavaThread *)target, _owned_monitor_ptr); } void VM_GetStackTrace::doit() { _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
< prev index next >