summaryrefslogtreecommitdiff
path: root/runtime/class_table.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2017-02-09 12:30:41 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-02-09 12:30:42 +0000
commit8d4b1189639f0d8982bde681ccbdd7c03fe6ddbf (patch)
treea16a1efaaadcb51001554a1ab829fbc456b104ae /runtime/class_table.cc
parente6dddf0f4f31db42c67661adc3845165c64d4c3d (diff)
parentcd556b003adbb53739d4b3f43135e6a0ae69509a (diff)
Merge "Fix dex cache resolved types and class table mismatch."
Diffstat (limited to 'runtime/class_table.cc')
-rw-r--r--runtime/class_table.cc13
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_);