< prev index next >

src/share/vm/runtime/sharedRuntime.cpp

Print this page

        

*** 637,647 **** JRT_END // ret_pc points into caller; we are returning caller's exception handler // for given exception address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, Handle& exception, ! bool force_unwind, bool top_frame_only) { assert(nm != NULL, "must exist"); ResourceMark rm; ScopeDesc* sd = nm->scope_desc_at(ret_pc); // determine handler bci, if any --- 637,647 ---- JRT_END // ret_pc points into caller; we are returning caller's exception handler // for given exception address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, Handle& exception, ! bool force_unwind, bool top_frame_only, bool& recursive_exception_occurred) { assert(nm != NULL, "must exist"); ResourceMark rm; ScopeDesc* sd = nm->scope_desc_at(ret_pc); // determine handler bci, if any
*** 665,674 **** --- 665,675 ---- // be set into thread local storage, and do another lookup for an // exception handler for this exception, this time starting at the // BCI of the exception handler which caused the exception to be // thrown (bugs 4307310 and 4546590). Set "exception" reference // argument to ensure that the correct exception is thrown (4870175). + recursive_exception_occurred = true; exception = Handle(THREAD, PENDING_EXCEPTION); CLEAR_PENDING_EXCEPTION; if (handler_bci >= 0) { bci = handler_bci; handler_bci = -1;
< prev index next >