Use handle in one case that spans a gc-point.
Bug: 16689428
(cherry picked from commit 38eecb0f4288a374c9b0b4b4df8793eb5fc6697c)
Change-Id: Id4a1bde9012e4dd333493e46997c200537c9cf55
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 4362b82..aec2ebd 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -4144,9 +4144,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)) {
@@ -4158,7 +4158,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.