diff options
author | 2014-07-22 00:59:52 -0700 | |
---|---|---|
committer | 2014-07-22 00:59:52 -0700 | |
commit | ecd4d9adc1e2b2ac1367de9a2dc1ca15ebf4310c (patch) | |
tree | c90bfa74b6ed0ed131b644e5df3a9c50f2ab8e30 | |
parent | 0a142c96c50ca9d2edb6ef995107fe368cd0a3fa (diff) |
Avoid marking erroneous classes as erroneous twice.
Change-Id: I1f340a6054cf36f6b4ba7d85cfd05b1c677dced7
-rw-r--r-- | runtime/class_linker.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index 6c5679ec63..3364491240 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -1668,7 +1668,9 @@ mirror::Class* ClassLinker::DefineClass(const char* descriptor, if (self->IsExceptionPending()) { // An exception occured during load, set status to erroneous while holding klass' lock in case // notification is necessary. - klass->SetStatus(mirror::Class::kStatusError, self); + if (!klass->IsErroneous()) { + klass->SetStatus(mirror::Class::kStatusError, self); + } return nullptr; } klass->SetClinitThreadId(self->GetTid()); @@ -1685,7 +1687,9 @@ mirror::Class* ClassLinker::DefineClass(const char* descriptor, CHECK(!klass->IsLoaded()); if (!LoadSuperAndInterfaces(klass, dex_file)) { // Loading failed. - klass->SetStatus(mirror::Class::kStatusError, self); + if (!klass->IsErroneous()) { + klass->SetStatus(mirror::Class::kStatusError, self); + } return nullptr; } CHECK(klass->IsLoaded()); @@ -1697,7 +1701,9 @@ mirror::Class* ClassLinker::DefineClass(const char* descriptor, mirror::Class* new_class = nullptr; if (!LinkClass(self, descriptor, klass, interfaces, &new_class)) { // Linking failed. - klass->SetStatus(mirror::Class::kStatusError, self); + if (!klass->IsErroneous()) { + klass->SetStatus(mirror::Class::kStatusError, self); + } return nullptr; } CHECK(new_class != nullptr) << descriptor; |