From b74cd29802f364b4cec88f4913fa38ade26b8fab Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Thu, 29 May 2014 14:31:33 -0700 Subject: Compaction cleanup for FindArrayClass. We now pass double pointer in to signify that it can cause thread suspension, this double pointer gets wrapped by a handle if don't find the array class in the cache. Change-Id: I43436b6c35597c7252b65d1180baddb5ac4caabb --- runtime/mirror/array.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'runtime/mirror') diff --git a/runtime/mirror/array.cc b/runtime/mirror/array.cc index 1076643..f7b5737 100644 --- a/runtime/mirror/array.cc +++ b/runtime/mirror/array.cc @@ -93,15 +93,17 @@ Array* Array::CreateMultiArray(Thread* self, Handle element_class, // Find/generate the array class. ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); + mirror::Class* element_class_ptr = element_class.Get(); StackHandleScope<1> hs(self); Handle array_class( - hs.NewHandle(class_linker->FindArrayClass(self, element_class.Get()))); + hs.NewHandle(class_linker->FindArrayClass(self, &element_class_ptr))); if (UNLIKELY(array_class.Get() == nullptr)) { CHECK(self->IsExceptionPending()); return nullptr; } for (int32_t i = 1; i < dimensions->GetLength(); ++i) { - array_class.Assign(class_linker->FindArrayClass(self, array_class.Get())); + mirror::Class* array_class_ptr = array_class.Get(); + array_class.Assign(class_linker->FindArrayClass(self, &array_class_ptr)); if (UNLIKELY(array_class.Get() == nullptr)) { CHECK(self->IsExceptionPending()); return nullptr; -- cgit v1.1