hotspot/src/share/vm/runtime/sharedRuntime.cpp
changeset 41057 f77b9d9e0e4c
parent 40655 9f644073d3a0
child 41545 45a3f587a838
equal deleted inserted replaced
41054:29ca540a1910 41057:f77b9d9e0e4c
   619 JRT_END
   619 JRT_END
   620 
   620 
   621 // ret_pc points into caller; we are returning caller's exception handler
   621 // ret_pc points into caller; we are returning caller's exception handler
   622 // for given exception
   622 // for given exception
   623 address SharedRuntime::compute_compiled_exc_handler(CompiledMethod* cm, address ret_pc, Handle& exception,
   623 address SharedRuntime::compute_compiled_exc_handler(CompiledMethod* cm, address ret_pc, Handle& exception,
   624                                                     bool force_unwind, bool top_frame_only) {
   624                                                     bool force_unwind, bool top_frame_only, bool& recursive_exception_occurred) {
   625   assert(cm != NULL, "must exist");
   625   assert(cm != NULL, "must exist");
   626   ResourceMark rm;
   626   ResourceMark rm;
   627 
   627 
   628 #if INCLUDE_JVMCI
   628 #if INCLUDE_JVMCI
   629   if (cm->is_compiled_by_jvmci()) {
   629   if (cm->is_compiled_by_jvmci()) {
   675         // be set into thread local storage, and do another lookup for an
   675         // be set into thread local storage, and do another lookup for an
   676         // exception handler for this exception, this time starting at the
   676         // exception handler for this exception, this time starting at the
   677         // BCI of the exception handler which caused the exception to be
   677         // BCI of the exception handler which caused the exception to be
   678         // thrown (bugs 4307310 and 4546590). Set "exception" reference
   678         // thrown (bugs 4307310 and 4546590). Set "exception" reference
   679         // argument to ensure that the correct exception is thrown (4870175).
   679         // argument to ensure that the correct exception is thrown (4870175).
       
   680         recursive_exception_occurred = true;
   680         exception = Handle(THREAD, PENDING_EXCEPTION);
   681         exception = Handle(THREAD, PENDING_EXCEPTION);
   681         CLEAR_PENDING_EXCEPTION;
   682         CLEAR_PENDING_EXCEPTION;
   682         if (handler_bci >= 0) {
   683         if (handler_bci >= 0) {
   683           bci = handler_bci;
   684           bci = handler_bci;
   684           handler_bci = -1;
   685           handler_bci = -1;