diff options
author | Andreas Gampe <agampe@google.com> | 2015-04-01 14:49:06 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2015-04-01 14:49:06 -0700 |
commit | aacc25d54c3224cd9e26fdabe6c8444f5443b350 (patch) | |
tree | 2d989997b59c6650d2e85876f3e2d0ce1d1a4275 /runtime | |
parent | a703a7280a5081dd4e6f7e0d3860748f8a29965e (diff) | |
download | art-aacc25d54c3224cd9e26fdabe6c8444f5443b350.zip art-aacc25d54c3224cd9e26fdabe6c8444f5443b350.tar.gz art-aacc25d54c3224cd9e26fdabe6c8444f5443b350.tar.bz2 |
ART: Fix unstarted runtime
Correctly delete local refs for dex/direct-byte-buffer.
Change-Id: Ia74dfafb959d69aa281af7316f393997e053a3b3
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/interpreter/unstarted_runtime.cc | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/runtime/interpreter/unstarted_runtime.cc b/runtime/interpreter/unstarted_runtime.cc index 1b08e80..281f332 100644 --- a/runtime/interpreter/unstarted_runtime.cc +++ b/runtime/interpreter/unstarted_runtime.cc @@ -19,6 +19,8 @@ #include <cmath> #include <unordered_map> +#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<void*>(reinterpret_cast<const void*>(dex_file->Begin())); - jobject byte_buffer = env->NewDirectByteBuffer(address, dex_file->Size()); - if (byte_buffer == nullptr) { + ScopedLocalRef<jobject> 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<jobject> dex(env, env->CallStaticObjectMethodA( + WellKnownClasses::com_android_dex_Dex, + WellKnownClasses::com_android_dex_Dex_create, + args)); + + return self->DecodeJObject(dex.get()); } static void UnstartedDexCacheGetDexNative( |