From: Andreas Gampe Date: Wed, 1 Apr 2015 21:49:06 +0000 (-0700) Subject: ART: Fix unstarted runtime X-Git-Tag: android-x86-7.1-r1~889^2~1654^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=aacc25d54c3224cd9e26fdabe6c8444f5443b350;p=android-x86%2Fart.git ART: Fix unstarted runtime Correctly delete local refs for dex/direct-byte-buffer. Change-Id: Ia74dfafb959d69aa281af7316f393997e053a3b3 --- diff --git a/runtime/interpreter/unstarted_runtime.cc b/runtime/interpreter/unstarted_runtime.cc index 1b08e8049..281f33238 100644 --- a/runtime/interpreter/unstarted_runtime.cc +++ b/runtime/interpreter/unstarted_runtime.cc @@ -19,6 +19,8 @@ #include #include +#include "ScopedLocalRef.h" + #include "base/logging.h" #include "base/macros.h" #include "class_linker.h" @@ -467,18 +469,21 @@ static mirror::Object* GetDexFromDexCache(Thread* self, mirror::DexCache* dex_ca JNIEnv* env = self->GetJniEnv(); DCHECK(env != nullptr); void* address = const_cast(reinterpret_cast(dex_file->Begin())); - jobject byte_buffer = env->NewDirectByteBuffer(address, dex_file->Size()); - if (byte_buffer == nullptr) { + ScopedLocalRef byte_buffer(env, env->NewDirectByteBuffer(address, dex_file->Size())); + if (byte_buffer.get() == nullptr) { DCHECK(self->IsExceptionPending()); return nullptr; } jvalue args[1]; - args[0].l = byte_buffer; - return self->DecodeJObject( - env->CallStaticObjectMethodA(WellKnownClasses::com_android_dex_Dex, - WellKnownClasses::com_android_dex_Dex_create, - args)); + args[0].l = byte_buffer.get(); + + ScopedLocalRef dex(env, env->CallStaticObjectMethodA( + WellKnownClasses::com_android_dex_Dex, + WellKnownClasses::com_android_dex_Dex_create, + args)); + + return self->DecodeJObject(dex.get()); } static void UnstartedDexCacheGetDexNative(