hotspot/src/share/vm/jvmci/jvmciRuntime.cpp
changeset 41057 f77b9d9e0e4c
parent 40093 f94d179a730b
child 41322 d91c045cdfe4
equal deleted inserted replaced
41054:29ca540a1910 41057:f77b9d9e0e4c
   311     // exception handler can cause class loading, which might throw an
   311     // exception handler can cause class loading, which might throw an
   312     // exception and those fields are expected to be clear during
   312     // exception and those fields are expected to be clear during
   313     // normal bytecode execution.
   313     // normal bytecode execution.
   314     thread->clear_exception_oop_and_pc();
   314     thread->clear_exception_oop_and_pc();
   315 
   315 
   316     continuation = SharedRuntime::compute_compiled_exc_handler(cm, pc, exception, false, false);
   316     bool recursive_exception = false;
       
   317     continuation = SharedRuntime::compute_compiled_exc_handler(cm, pc, exception, false, false, recursive_exception);
   317     // If an exception was thrown during exception dispatch, the exception oop may have changed
   318     // If an exception was thrown during exception dispatch, the exception oop may have changed
   318     thread->set_exception_oop(exception());
   319     thread->set_exception_oop(exception());
   319     thread->set_exception_pc(pc);
   320     thread->set_exception_pc(pc);
   320 
   321 
   321     // the exception cache is used only by non-implicit exceptions
   322     // the exception cache is used only by non-implicit exceptions
   322     if (continuation != NULL && !SharedRuntime::deopt_blob()->contains(continuation)) {
   323     // Update the exception cache only when there didn't happen
       
   324     // another exception during the computation of the compiled
       
   325     // exception handler. Checking for exception oop equality is not
       
   326     // sufficient because some exceptions are pre-allocated and reused.
       
   327     if (continuation != NULL && !recursive_exception && !SharedRuntime::deopt_blob()->contains(continuation)) {
   323       cm->add_handler_for_exception_and_pc(exception, pc, continuation);
   328       cm->add_handler_for_exception_and_pc(exception, pc, continuation);
   324     }
   329     }
   325   }
   330   }
   326 
   331 
   327   // Set flag if return address is a method handle call site.
   332   // Set flag if return address is a method handle call site.