Use handle in one case that spans a gc-point.
Bug: 16689428
Change-Id: Ib209d2ca1e7024bffb2bc17c5b5899e231c0e2ca
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index d52992c..db42146 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -4191,9 +4191,9 @@
klass->GetSuperClass()->GetVTableLength();
size_t actual_count = klass->GetSuperClass()->GetVTableLength();
CHECK_LE(actual_count, max_count);
- StackHandleScope<3> hs(self);
+ StackHandleScope<4> hs(self);
+ Handle<mirror::Class> super_class(hs.NewHandle(klass->GetSuperClass()));
Handle<mirror::ObjectArray<mirror::ArtMethod>> vtable;
- mirror::Class* super_class = klass->GetSuperClass();
if (super_class->ShouldHaveEmbeddedImtAndVTable()) {
vtable = hs.NewHandle(AllocArtMethodArray(self, max_count));
if (UNLIKELY(vtable.Get() == nullptr)) {
@@ -4205,7 +4205,7 @@
vtable->Set<false>(i, super_class->GetVTableEntry(i));
}
} else {
- CHECK(super_class->GetVTable() != nullptr) << PrettyClass(super_class);
+ CHECK(super_class->GetVTable() != nullptr) << PrettyClass(super_class.Get());
vtable = hs.NewHandle(super_class->GetVTable()->CopyOf(self, max_count));
if (UNLIKELY(vtable.Get() == nullptr)) {
CHECK(self->IsExceptionPending()); // OOME.