summaryrefslogtreecommitdiffstats
path: root/runtime/monitor_android.cc
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-07-16 22:20:31 -0700
committerAndreas Gampe <agampe@google.com>2014-07-25 09:22:34 +0000
commit4a8c3fa4bd8d95fac5671ab778dd00b6dc3ec0e4 (patch)
treeb601d3d5dabfe16571f5fe10667cb9e09cf8a329 /runtime/monitor_android.cc
parent81457a3cd8fca14396b5785a4e4c8070c259b07a (diff)
downloadart-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.cc1
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);