8034860: Fatal error due to incorrect thread state during nightly testing
authorccheung
Fri, 14 Feb 2014 09:50:17 -0800
changeset 22792 954fdcaf3b37
parent 22791 f3ed59131459
child 22793 05cb9f38b9c7
8034860: Fatal error due to incorrect thread state during nightly testing Summary: use the HAS_PENDING_EXCEPTION and CLEAR_PENDING_EXCEPTION macros Reviewed-by: dholmes, coleenp, dcubed
hotspot/src/share/vm/prims/whitebox.hpp
--- a/hotspot/src/share/vm/prims/whitebox.hpp	Wed Feb 12 22:16:39 2014 +0000
+++ b/hotspot/src/share/vm/prims/whitebox.hpp	Fri Feb 14 09:50:17 2014 -0800
@@ -36,20 +36,22 @@
 #define WB_END JNI_END
 #define WB_METHOD_DECLARE(result_type) extern "C" result_type JNICALL
 
-#define CHECK_JNI_EXCEPTION_(env, value) \
-  do {                                   \
-    if (env->ExceptionCheck()) {         \
-      env->ExceptionClear();             \
-      return(value);                     \
-    }                                    \
+#define CHECK_JNI_EXCEPTION_(env, value)                               \
+  do {                                                                 \
+    JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \
+    if (HAS_PENDING_EXCEPTION) {                                       \
+      CLEAR_PENDING_EXCEPTION;                                         \
+      return(value);                                                   \
+    }                                                                  \
   } while (0)
 
-#define CHECK_JNI_EXCEPTION(env) \
-  do {                           \
-    if (env->ExceptionCheck()) { \
-      env->ExceptionClear();     \
-      return;                    \
-    }                            \
+#define CHECK_JNI_EXCEPTION(env)                                       \
+  do {                                                                 \
+    JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \
+    if (HAS_PENDING_EXCEPTION) {                                       \
+      CLEAR_PENDING_EXCEPTION;                                         \
+      return;                                                          \
+    }                                                                  \
   } while (0)
 
 class WhiteBox : public AllStatic {