ART: Fix stale reference use in debugger.
Test: run-jdwp-tests.sh --mode=host --variant=X32 --debug
Bug: 31113334
Change-Id: I48d137b0fe87b01ed982a4275d1b558fd6e23a4f
diff --git a/runtime/debugger.cc b/runtime/debugger.cc
index f2402cc..a38c9ab 100644
--- a/runtime/debugger.cc
+++ b/runtime/debugger.cc
@@ -848,20 +848,21 @@
JDWP::JdwpError Dbg::GetMonitorInfo(JDWP::ObjectId object_id, JDWP::ExpandBuf* reply) {
JDWP::JdwpError error;
- ObjPtr<mirror::Object> o = gRegistry->Get<mirror::Object*>(object_id, &error);
+ Thread* self = Thread::Current();
+ StackHandleScope<1u> hs(self);
+ Handle<mirror::Object> o = hs.NewHandle(gRegistry->Get<mirror::Object*>(object_id, &error));
if (o == nullptr) {
return JDWP::ERR_INVALID_OBJECT;
}
// Ensure all threads are suspended while we read objects' lock words.
- Thread* self = Thread::Current();
CHECK_EQ(self->GetState(), kRunnable);
MonitorInfo monitor_info;
{
ScopedThreadSuspension sts(self, kSuspended);
ScopedSuspendAll ssa(__FUNCTION__);
- monitor_info = MonitorInfo(o.Ptr());
+ monitor_info = MonitorInfo(o.Get());
}
if (monitor_info.owner_ != nullptr) {
expandBufAddObjectId(reply, gRegistry->Add(monitor_info.owner_->GetPeerFromOtherThread()));