src/share/vm/runtime/sharedRuntime.cpp

changeset 9396
b62c44a689e4
parent 8773
1eaa9a72d705
child 9417
65409bcab2ad
equal deleted inserted replaced
9395:6bbac0c63500 9396:b62c44a689e4
637 JRT_END 637 JRT_END
638 638
639 // ret_pc points into caller; we are returning caller's exception handler 639 // ret_pc points into caller; we are returning caller's exception handler
640 // for given exception 640 // for given exception
641 address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, Handle& exception, 641 address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, Handle& exception,
642 bool force_unwind, bool top_frame_only) { 642 bool force_unwind, bool top_frame_only, bool& recursive_exception_occurred) {
643 assert(nm != NULL, "must exist"); 643 assert(nm != NULL, "must exist");
644 ResourceMark rm; 644 ResourceMark rm;
645 645
646 ScopeDesc* sd = nm->scope_desc_at(ret_pc); 646 ScopeDesc* sd = nm->scope_desc_at(ret_pc);
647 // determine handler bci, if any 647 // determine handler bci, if any
665 // be set into thread local storage, and do another lookup for an 665 // be set into thread local storage, and do another lookup for an
666 // exception handler for this exception, this time starting at the 666 // exception handler for this exception, this time starting at the
667 // BCI of the exception handler which caused the exception to be 667 // BCI of the exception handler which caused the exception to be
668 // thrown (bugs 4307310 and 4546590). Set "exception" reference 668 // thrown (bugs 4307310 and 4546590). Set "exception" reference
669 // argument to ensure that the correct exception is thrown (4870175). 669 // argument to ensure that the correct exception is thrown (4870175).
670 recursive_exception_occurred = true;
670 exception = Handle(THREAD, PENDING_EXCEPTION); 671 exception = Handle(THREAD, PENDING_EXCEPTION);
671 CLEAR_PENDING_EXCEPTION; 672 CLEAR_PENDING_EXCEPTION;
672 if (handler_bci >= 0) { 673 if (handler_bci >= 0) {
673 bci = handler_bci; 674 bci = handler_bci;
674 handler_bci = -1; 675 handler_bci = -1;

mercurial