8022836: JVM crashes in JVMTIENVBASE::GET_CURRENT_CONTENDED_MONITOR and GET_OWNED_MONITOR
authorsgabdura
Wed, 18 Sep 2013 16:48:49 +0400
changeset 20055 7281a3cb27f2
parent 19971 37d89625f15c
child 20056 7cf69d7bf8a6
8022836: JVM crashes in JVMTIENVBASE::GET_CURRENT_CONTENDED_MONITOR and GET_OWNED_MONITOR Summary: Check that the _java_thread parameter is valid when it is possible that the JavaThread has exited after the initial checks were made in generated/jvmtifiles/jvmtiEnter.cpp: jvmti_GetCurrentContendedMonitor() Reviewed-by: dcubed, dsamersoff
hotspot/src/share/vm/prims/jvmtiEnvBase.hpp
--- a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp	Tue Sep 17 20:20:03 2013 +0200
+++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp	Wed Sep 18 16:48:49 2013 +0400
@@ -406,7 +406,11 @@
   VMOp_Type type() const { return VMOp_GetCurrentContendedMonitor; }
   jvmtiError result() { return _result; }
   void doit() {
-    _result = ((JvmtiEnvBase *)_env)->get_current_contended_monitor(_calling_thread,_java_thread,_owned_monitor_ptr);
+    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
+    if (Threads::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);
+    }
   }
 };