diff options
Diffstat (limited to 'runtime/class_linker.cc')
| -rw-r--r-- | runtime/class_linker.cc | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index cdb7712211..5dac95d3b3 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -876,8 +876,8 @@ void ClassLinker::InitFromImage() { hs.NewHandle(dex_caches_object->AsObjectArray<mirror::DexCache>())); Handle<mirror::ObjectArray<mirror::Class>> class_roots(hs.NewHandle( - space->GetImageHeader().GetImageRoot(ImageHeader::kClassRoots)-> - AsObjectArray<mirror::Class>())); + space->GetImageHeader().GetImageRoot(ImageHeader::kClassRoots)-> + AsObjectArray<mirror::Class>())); class_roots_ = GcRoot<mirror::ObjectArray<mirror::Class>>(class_roots.Get()); // Special case of setting up the String class early so that we can test arbitrary objects @@ -886,7 +886,7 @@ void ClassLinker::InitFromImage() { mirror::Class* java_lang_Object = GetClassRoot(kJavaLangObject); java_lang_Object->SetObjectSize(sizeof(mirror::Object)); - Runtime::Current()->SetSentinel(Runtime::Current()->GetHeap()->AllocObject<true>(self, + Runtime::Current()->SetSentinel(heap->AllocObject<true>(self, java_lang_Object, java_lang_Object->GetObjectSize(), VoidFunctor())); @@ -2155,8 +2155,6 @@ void ClassLinker::LoadClassMembers(Thread* self, last_field_idx = field_idx; } } - klass->SetSFieldsPtr(sfields); - DCHECK_EQ(klass->NumStaticFields(), num_sfields); // Load instance fields. LengthPrefixedArray<ArtField>* ifields = AllocArtFieldArray(self, allocator, @@ -2178,8 +2176,17 @@ void ClassLinker::LoadClassMembers(Thread* self, LOG(WARNING) << "Duplicate fields in class " << PrettyDescriptor(klass.Get()) << " (unique static fields: " << num_sfields << "/" << it.NumStaticFields() << ", unique instance fields: " << num_ifields << "/" << it.NumInstanceFields() << ")"; - // NOTE: Not shrinking the over-allocated sfields/ifields. + // NOTE: Not shrinking the over-allocated sfields/ifields, just setting size. + if (sfields != nullptr) { + sfields->SetSize(num_sfields); + } + if (ifields != nullptr) { + ifields->SetSize(num_ifields); + } } + // Set the field arrays. + klass->SetSFieldsPtr(sfields); + DCHECK_EQ(klass->NumStaticFields(), num_sfields); klass->SetIFieldsPtr(ifields); DCHECK_EQ(klass->NumInstanceFields(), num_ifields); // Load methods. |