< prev index next >
src/share/vm/runtime/sharedRuntime.cpp
Print this page
@@ -637,11 +637,11 @@
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 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,10 +665,11 @@
// 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 >