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.