diff options
Diffstat (limited to 'runtime/interpreter/interpreter.cc')
-rw-r--r-- | runtime/interpreter/interpreter.cc | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/runtime/interpreter/interpreter.cc b/runtime/interpreter/interpreter.cc index 478c74cd25..f77a0f6d35 100644 --- a/runtime/interpreter/interpreter.cc +++ b/runtime/interpreter/interpreter.cc @@ -524,16 +524,17 @@ extern "C" void artInterpreterToInterpreterBridge(Thread* self, MethodHelper& mh ArtMethod* method = shadow_frame->GetMethod(); // Ensure static methods are initialized. if (method->IsStatic()) { - StackHandleScope<1> hs(self); - Handle<Class> declaringClass(hs.NewHandle(method->GetDeclaringClass())); - if (UNLIKELY(!declaringClass->IsInitializing())) { - if (UNLIKELY(!Runtime::Current()->GetClassLinker()->EnsureInitialized(declaringClass, true, - true))) { - DCHECK(Thread::Current()->IsExceptionPending()); + mirror::Class* declaring_class = method->GetDeclaringClass(); + if (UNLIKELY(!declaring_class->IsInitializing())) { + StackHandleScope<1> hs(self); + HandleWrapper<Class> h_declaring_class(hs.NewHandleWrapper(&declaring_class)); + if (UNLIKELY(!Runtime::Current()->GetClassLinker()->EnsureInitialized( + h_declaring_class, true, true))) { + DCHECK(self->IsExceptionPending()); self->PopShadowFrame(); return; } - CHECK(declaringClass->IsInitializing()); + CHECK(h_declaring_class->IsInitializing()); } } |