1286 } 1287 delete owned_monitors_list; 1288 1289 return err; 1290 } /* end GetOwnedMonitorStackDepthInfo */ 1291 1292 1293 // Threads_lock NOT held, java_thread not protected by lock 1294 // java_thread - pre-checked 1295 // monitor_ptr - pre-checked for NULL 1296 jvmtiError 1297 JvmtiEnv::GetCurrentContendedMonitor(JavaThread* java_thread, jobject* monitor_ptr) { 1298 jvmtiError err = JVMTI_ERROR_NONE; 1299 JavaThread* calling_thread = JavaThread::current(); 1300 1301 // It is only safe to perform the direct operation on the current 1302 // thread. All other usage needs to use a vm-safepoint-op for safety. 1303 if (java_thread == calling_thread) { 1304 err = get_current_contended_monitor(calling_thread, java_thread, monitor_ptr); 1305 } else { 1306 // get contended monitor information at safepoint. 1307 VM_GetCurrentContendedMonitor op(this, calling_thread, java_thread, monitor_ptr); 1308 VMThread::execute(&op); 1309 err = op.result(); 1310 } 1311 return err; 1312 } /* end GetCurrentContendedMonitor */ 1313 1314 1315 // Threads_lock NOT held 1316 // thread - NOT pre-checked 1317 // proc - pre-checked for NULL 1318 // arg - NULL is a valid value, must be checked 1319 jvmtiError 1320 JvmtiEnv::RunAgentThread(jthread thread, jvmtiStartFunction proc, const void* arg, jint priority) { 1321 JavaThread* current_thread = JavaThread::current(); 1322 1323 JavaThread* java_thread = NULL; 1324 oop thread_oop = NULL; 1325 ThreadsListHandle tlh(current_thread); 1326 jvmtiError err = JvmtiExport::cv_external_thread_to_JavaThread(tlh.list(), thread, &java_thread, &thread_oop); 1327 if (err != JVMTI_ERROR_NONE) { 1328 // We got an error code so we don't have a JavaThread *, but | 1286 } 1287 delete owned_monitors_list; 1288 1289 return err; 1290 } /* end GetOwnedMonitorStackDepthInfo */ 1291 1292 1293 // Threads_lock NOT held, java_thread not protected by lock 1294 // java_thread - pre-checked 1295 // monitor_ptr - pre-checked for NULL 1296 jvmtiError 1297 JvmtiEnv::GetCurrentContendedMonitor(JavaThread* java_thread, jobject* monitor_ptr) { 1298 jvmtiError err = JVMTI_ERROR_NONE; 1299 JavaThread* calling_thread = JavaThread::current(); 1300 1301 // It is only safe to perform the direct operation on the current 1302 // thread. All other usage needs to use a vm-safepoint-op for safety. 1303 if (java_thread == calling_thread) { 1304 err = get_current_contended_monitor(calling_thread, java_thread, monitor_ptr); 1305 } else { 1306 // get contended monitor information with handshake. 1307 GetOneCurrentContendedMonitor op(this, calling_thread, monitor_ptr); 1308 Handshake::execute(&op, java_thread); 1309 err = op.result(); 1310 } 1311 return err; 1312 } /* end GetCurrentContendedMonitor */ 1313 1314 1315 // Threads_lock NOT held 1316 // thread - NOT pre-checked 1317 // proc - pre-checked for NULL 1318 // arg - NULL is a valid value, must be checked 1319 jvmtiError 1320 JvmtiEnv::RunAgentThread(jthread thread, jvmtiStartFunction proc, const void* arg, jint priority) { 1321 JavaThread* current_thread = JavaThread::current(); 1322 1323 JavaThread* java_thread = NULL; 1324 oop thread_oop = NULL; 1325 ThreadsListHandle tlh(current_thread); 1326 jvmtiError err = JvmtiExport::cv_external_thread_to_JavaThread(tlh.list(), thread, &java_thread, &thread_oop); 1327 if (err != JVMTI_ERROR_NONE) { 1328 // We got an error code so we don't have a JavaThread *, but |