< prev index next >
src/hotspot/share/prims/jvmtiEnv.cpp
Print this page
@@ -1199,25 +1199,23 @@
// owned_monitor_count_ptr - pre-checked for NULL
// owned_monitors_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetOwnedMonitorInfo(JavaThread* java_thread, jint* owned_monitor_count_ptr, jobject** owned_monitors_ptr) {
jvmtiError err = JVMTI_ERROR_NONE;
- JavaThread* calling_thread = JavaThread::current();
// growable array of jvmti monitors info on the C-heap
GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list =
new (ResourceObj::C_HEAP, mtInternal) GrowableArray<jvmtiMonitorStackDepthInfo*>(1, true);
// 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 == calling_thread) {
- err = get_owned_monitors(calling_thread, java_thread, owned_monitors_list);
+ // thread. All other usage needs to use a direct handshake for safety.
+ if (java_thread == JavaThread::current()) {
+ err = get_owned_monitors(java_thread, owned_monitors_list);
} else {
- // JVMTI get monitors info at safepoint. Do not require target thread to
- // be suspended.
- VM_GetOwnedMonitorInfo op(this, calling_thread, java_thread, owned_monitors_list);
- VMThread::execute(&op);
+ // get owned monitors info with handshake
+ GetOwnedMonitorInfoClosure op(this, owned_monitors_list);
+ Handshake::execute_direct(&op, java_thread);
err = op.result();
}
jint owned_monitor_count = owned_monitors_list->length();
if (err == JVMTI_ERROR_NONE) {
if ((err = allocate(owned_monitor_count * sizeof(jobject *),
@@ -1245,25 +1243,23 @@
// monitor_info_count_ptr - pre-checked for NULL
// monitor_info_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetOwnedMonitorStackDepthInfo(JavaThread* java_thread, jint* monitor_info_count_ptr, jvmtiMonitorStackDepthInfo** monitor_info_ptr) {
jvmtiError err = JVMTI_ERROR_NONE;
- JavaThread* calling_thread = JavaThread::current();
// growable array of jvmti monitors info on the C-heap
GrowableArray<jvmtiMonitorStackDepthInfo*> *owned_monitors_list =
new (ResourceObj::C_HEAP, mtInternal) GrowableArray<jvmtiMonitorStackDepthInfo*>(1, true);
// 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 == calling_thread) {
- err = get_owned_monitors(calling_thread, java_thread, owned_monitors_list);
+ // thread. All other usage needs to use a direct handshake for safety.
+ if (java_thread == JavaThread::current()) {
+ err = get_owned_monitors(java_thread, owned_monitors_list);
} else {
- // JVMTI get owned monitors info at safepoint. Do not require target thread to
- // be suspended.
- VM_GetOwnedMonitorInfo op(this, calling_thread, java_thread, owned_monitors_list);
- VMThread::execute(&op);
+ // get owned monitors info with handshake
+ GetOwnedMonitorInfoClosure op(this, owned_monitors_list);
+ Handshake::execute_direct(&op, java_thread);
err = op.result();
}
jint owned_monitor_count = owned_monitors_list->length();
if (err == JVMTI_ERROR_NONE) {
@@ -1294,20 +1290,19 @@
// java_thread - pre-checked
// monitor_ptr - pre-checked for NULL
jvmtiError
JvmtiEnv::GetCurrentContendedMonitor(JavaThread* java_thread, jobject* monitor_ptr) {
jvmtiError err = JVMTI_ERROR_NONE;
- JavaThread* calling_thread = JavaThread::current();
// 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 == calling_thread) {
- err = get_current_contended_monitor(calling_thread, java_thread, monitor_ptr);
+ // thread. All other usage needs to use a direct handshake for safety.
+ if (java_thread == JavaThread::current()) {
+ err = get_current_contended_monitor(java_thread, monitor_ptr);
} else {
- // get contended monitor information at safepoint.
- VM_GetCurrentContendedMonitor op(this, calling_thread, java_thread, monitor_ptr);
- VMThread::execute(&op);
+ // get contended monitor information with handshake
+ GetCurrentContendedMonitorClosure op(this, monitor_ptr);
+ Handshake::execute_direct(&op, java_thread);
err = op.result();
}
return err;
} /* end GetCurrentContendedMonitor */
< prev index next >