summaryrefslogtreecommitdiffstats
path: root/dex2oat/dex2oat.cc
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2016-06-02 11:48:30 -0700
committerMathieu Chartier <mathieuc@google.com>2016-06-03 12:45:04 -0700
commitd6d49e56c2b7b11f474acb80cb02bb1fe9b7861e (patch)
treeb6df3e71798c9a547e56dcbe7d7b7a6f3dc003a2 /dex2oat/dex2oat.cc
parentb089eccf503646e6ed2d5bb20d973d9131166655 (diff)
downloadandroid_art-d6d49e56c2b7b11f474acb80cb02bb1fe9b7861e.tar.gz
android_art-d6d49e56c2b7b11f474acb80cb02bb1fe9b7861e.tar.bz2
android_art-d6d49e56c2b7b11f474acb80cb02bb1fe9b7861e.zip
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 (cherry picked from commit f284d448e3edd428b6ade473d0993028638b2064) Change-Id: Ie1b0b0cf835a998e19227cbb90014011a6cd40c4
Diffstat (limited to 'dex2oat/dex2oat.cc')
-rw-r--r--dex2oat/dex2oat.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc
index cce83f32b5..c4754ce420 100644
--- a/dex2oat/dex2oat.cc
+++ b/dex2oat/dex2oat.cc
@@ -1462,7 +1462,8 @@ class Dex2Oat FINAL {
for (const auto& dex_file : dex_files_) {
ScopedObjectAccess soa(self);
dex_caches_.push_back(soa.AddLocalReference<jobject>(
- class_linker->RegisterDexFile(*dex_file, Runtime::Current()->GetLinearAlloc())));
+ class_linker->RegisterDexFile(*dex_file,
+ soa.Decode<mirror::ClassLoader*>(class_loader_))));
}
return true;