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
--- 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 {