src/hotspot/share/jvmci/jvmciRuntime.cpp
changeset 47785 5692c538ecef
parent 47765 b7c7428eaab9
child 47796 47629b00daa9
--- a/src/hotspot/share/jvmci/jvmciRuntime.cpp	Mon Nov 06 11:11:44 2017 +0100
+++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp	Mon Nov 06 09:44:42 2017 +0100
@@ -825,24 +825,33 @@
   if (compiler != NULL && compiler->is_bootstrapping()) {
     return level;
   }
-  if (!is_HotSpotJVMCIRuntime_initialized() || !_comp_level_adjustment) {
+  if (!is_HotSpotJVMCIRuntime_initialized() || _comp_level_adjustment == JVMCIRuntime::none) {
     // JVMCI cannot participate in compilation scheduling until
     // JVMCI is initialized and indicates it wants to participate.
     return level;
   }
 
 #define CHECK_RETURN THREAD); \
-if (HAS_PENDING_EXCEPTION) { \
-  Handle exception(THREAD, PENDING_EXCEPTION); \
-  CLEAR_PENDING_EXCEPTION; \
-\
-  java_lang_Throwable::java_printStackTrace(exception, THREAD); \
   if (HAS_PENDING_EXCEPTION) { \
+    Handle exception(THREAD, PENDING_EXCEPTION); \
     CLEAR_PENDING_EXCEPTION; \
+  \
+    if (exception->is_a(SystemDictionary::ThreadDeath_klass())) { \
+      /* In the special case of ThreadDeath, we need to reset the */ \
+      /* pending async exception so that it is propagated.        */ \
+      thread->set_pending_async_exception(exception()); \
+      return level; \
+    } \
+    tty->print("Uncaught exception while adjusting compilation level: "); \
+    java_lang_Throwable::print(exception(), tty); \
+    tty->cr(); \
+    java_lang_Throwable::print_stack_trace(exception, tty); \
+    if (HAS_PENDING_EXCEPTION) { \
+      CLEAR_PENDING_EXCEPTION; \
+    } \
+    return level; \
   } \
-  return level; \
-} \
-(void)(0
+  (void)(0
 
 
   Thread* THREAD = thread;