diff options
author | Andreas Gampe <agampe@google.com> | 2014-07-16 22:20:31 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-07-25 09:22:34 +0000 |
commit | 4a8c3fa4bd8d95fac5671ab778dd00b6dc3ec0e4 (patch) | |
tree | b601d3d5dabfe16571f5fe10667cb9e09cf8a329 /runtime/monitor_android.cc | |
parent | 81457a3cd8fca14396b5785a4e4c8070c259b07a (diff) | |
download | art-4a8c3fa4bd8d95fac5671ab778dd00b6dc3ec0e4.zip art-4a8c3fa4bd8d95fac5671ab778dd00b6dc3ec0e4.tar.gz art-4a8c3fa4bd8d95fac5671ab778dd00b6dc3ec0e4.tar.bz2 |
ART: Relax CurrentMethodVisitor requirements on GetDexPC
In case we want to dump a Java stack after an unhandled fault, in
case we hold a thinlocked monitor, that monitor might get inflated.
That can cause an abort as we may not have enough/correct information
for the state at the bottom-most call.
Relax GetDexPc in the CurrentMethodVisitor to not abort when it cannot
find a dex pc. Instead, let the caller handle such a case. This CL
allows the locking_dex_pc_ in Monitor to be DexFile::kDexNoIndex,
which avoids the above abort.
Bug: 16352802, 16556938
Change-Id: I3adf89b2d8f018a0c3e3abdd26e542f46ee59eef
Diffstat (limited to 'runtime/monitor_android.cc')
-rw-r--r-- | runtime/monitor_android.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/runtime/monitor_android.cc b/runtime/monitor_android.cc index d89290b..c46efd8 100644 --- a/runtime/monitor_android.cc +++ b/runtime/monitor_android.cc @@ -79,6 +79,7 @@ void Monitor::LogContentionEvent(Thread* self, uint32_t wait_ms, uint32_t sample // Emit the source code file name, <= 37 bytes. uint32_t pc; mirror::ArtMethod* m = self->GetCurrentMethod(&pc); + CHECK_NE(pc, DexFile::kDexNoIndex); // TODO: Can we relax this check? const char* filename; uint32_t line_number; TranslateLocation(m, pc, &filename, &line_number); |