From f284d448e3edd428b6ade473d0993028638b2064 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Thu, 2 Jun 2016 11:48:30 -0700 Subject: Hold dex caches live in class table Prevents temporary dex caches being unloaded for the same dex file. Usually this is OK, but if someone resolved a string in that dex cache, it could leave stale pointers in BSS. Also it can use extra memory in linear alloc if we allocate dex cache arrays multiple times. Bug: 29083330 Change-Id: Ia44668f013ceef1f5eb80f653a48d0f8004548c9 --- runtime/class_table.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'runtime/class_table.cc') diff --git a/runtime/class_table.cc b/runtime/class_table.cc index 8267c68b29..f5ebcc5191 100644 --- a/runtime/class_table.cc +++ b/runtime/class_table.cc @@ -146,15 +146,15 @@ uint32_t ClassTable::ClassDescriptorHashEquals::operator()(const char* descripto return ComputeModifiedUtf8Hash(descriptor); } -bool ClassTable::InsertDexFile(mirror::Object* dex_file) { +bool ClassTable::InsertStrongRoot(mirror::Object* obj) { WriterMutexLock mu(Thread::Current(), lock_); - DCHECK(dex_file != nullptr); - for (GcRoot& root : dex_files_) { - if (root.Read() == dex_file) { + DCHECK(obj != nullptr); + for (GcRoot& root : strong_roots_) { + if (root.Read() == obj) { return false; } } - dex_files_.push_back(GcRoot(dex_file)); + strong_roots_.push_back(GcRoot(obj)); return true; } -- cgit v1.2.3-59-g8ed1b