changeset 6413:ba2cf1fc862b

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
author ccheung
date Fri, 14 Feb 2014 09:50:17 -0800
parents 56cd09c4a5c9
children 0e6af9b390af
files src/share/vm/prims/whitebox.hpp
diffstat 1 files changed, 14 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/prims/whitebox.hpp	Wed Feb 12 12:01:45 2014 -0800
+++ b/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 {