Merge "Fix debugger missing handle between adding and tagging object."
am: dffbbb6baa
Change-Id: Id894f1d2f72d00f3af4295bccae6f9050f609e1c
diff --git a/runtime/debugger.cc b/runtime/debugger.cc
index b4acc27..89bebb4 100644
--- a/runtime/debugger.cc
+++ b/runtime/debugger.cc
@@ -4059,7 +4059,7 @@
// Prepare JDWP ids for the reply.
JDWP::JdwpTag result_tag = BasicTagFromDescriptor(m->GetShorty());
const bool is_object_result = (result_tag == JDWP::JT_OBJECT);
- StackHandleScope<2> hs(soa.Self());
+ StackHandleScope<3> hs(soa.Self());
Handle<mirror::Object> object_result = hs.NewHandle(is_object_result ? result.GetL() : nullptr);
Handle<mirror::Throwable> exception = hs.NewHandle(soa.Self()->GetException());
soa.Self()->ClearException();
@@ -4100,9 +4100,9 @@
if (exceptionObjectId == 0) {
if (m->GetDeclaringClass()->IsStringClass()) {
// For string constructors, the new string is remapped to the receiver (stored in ref).
- mirror::Object* decoded_ref = soa.Self()->DecodeJObject(ref.get());
+ Handle<mirror::Object> decoded_ref = hs.NewHandle(soa.Self()->DecodeJObject(ref.get()));
result_value = gRegistry->Add(decoded_ref);
- result_tag = TagFromObject(soa, decoded_ref);
+ result_tag = TagFromObject(soa, decoded_ref.Get());
} else {
// TODO we could keep the receiver ObjectId in the DebugInvokeReq to avoid looking into the
// object registry.