diff options
author | 2017-02-09 12:30:41 +0000 | |
---|---|---|
committer | 2017-02-09 12:30:42 +0000 | |
commit | 8d4b1189639f0d8982bde681ccbdd7c03fe6ddbf (patch) | |
tree | a16a1efaaadcb51001554a1ab829fbc456b104ae /runtime/class_table.cc | |
parent | e6dddf0f4f31db42c67661adc3845165c64d4c3d (diff) | |
parent | cd556b003adbb53739d4b3f43135e6a0ae69509a (diff) |
Merge "Fix dex cache resolved types and class table mismatch."
Diffstat (limited to 'runtime/class_table.cc')
-rw-r--r-- | runtime/class_table.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/runtime/class_table.cc b/runtime/class_table.cc index f1458b42ab..af4f998fdf 100644 --- a/runtime/class_table.cc +++ b/runtime/class_table.cc @@ -117,6 +117,19 @@ mirror::Class* ClassTable::Lookup(const char* descriptor, size_t hash) { return nullptr; } +ObjPtr<mirror::Class> ClassTable::TryInsert(ObjPtr<mirror::Class> klass) { + TableSlot slot(klass); + WriterMutexLock mu(Thread::Current(), lock_); + for (ClassSet& class_set : classes_) { + auto it = class_set.Find(slot); + if (it != class_set.end()) { + return it->Read(); + } + } + classes_.back().Insert(slot); + return klass; +} + void ClassTable::Insert(ObjPtr<mirror::Class> klass) { const uint32_t hash = TableSlot::HashDescriptor(klass); WriterMutexLock mu(Thread::Current(), lock_); |