diff options
Diffstat (limited to 'runtime/interpreter/unstarted_runtime.cc')
-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 1b08e80495..281f33238a 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( |