diff options
author | Alex Light <allight@google.com> | 2018-06-08 14:51:09 -0700 |
---|---|---|
committer | Alex Light <allight@google.com> | 2018-07-10 08:44:17 -0700 |
commit | 2c8206ffeb07cebe2f612b8c66c0f4f4132e2be2 (patch) | |
tree | 9de26eb2e85f2ab46421caf0f1ca773dfcfca7f6 /runtime/quick_exception_handler.h | |
parent | 2d441b1253cca39bf3078422e8f0b2f4ec1bb408 (diff) |
Correctly send MethodExit events from exception handlers
Due to the way that exceptions are handled it was possible for a
MethodExit event to be sent multiple times for the same exception.
This fixes that issue by correctly keeping track of which exception
events have already been sent and correctly tracking the current
exception being thrown.
Test: ./test/testrunner/testrunner.py --host --runtime-option=-Xplugin:libtracefast-trampolined.so
Test: ./test.py --host
Change-Id: I7fa09f0f3f82181430b18805da5ba8daf68d4b89
Diffstat (limited to 'runtime/quick_exception_handler.h')
-rw-r--r-- | runtime/quick_exception_handler.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/runtime/quick_exception_handler.h b/runtime/quick_exception_handler.h index 1103dab52c..5579d368a3 100644 --- a/runtime/quick_exception_handler.h +++ b/runtime/quick_exception_handler.h @@ -47,7 +47,8 @@ class QuickExceptionHandler { UNREACHABLE(); } - // Find the catch handler for the given exception. + // Find the catch handler for the given exception and call all required Instrumentation methods. + // Note this might result in the exception being caught being different from 'exception'. void FindCatch(ObjPtr<mirror::Throwable> exception) REQUIRES_SHARED(Locks::mutator_lock_); // Deoptimize the stack to the upcall/some code that's not deoptimizeable. For |