Loading services/core/java/com/android/server/pm/dex/DexManager.java +11 −3 Original line number Diff line number Diff line Loading @@ -291,6 +291,7 @@ public class DexManager { return; } Set<String> dexFilesToRemove = new HashSet<>(); boolean updated = false; for (Map.Entry<String, DexUseInfo> entry : useInfo.getDexUseInfoMap().entrySet()) { String dexPath = entry.getKey(); DexUseInfo dexUseInfo = entry.getValue(); Loading @@ -311,7 +312,8 @@ public class DexManager { Slog.d(TAG, "Could not find package when compiling secondary dex " + packageName + " for user " + dexUseInfo.getOwnerUserId()); // Update the usage and continue, another user might still have the package. mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId()); updated = mPackageDexUsage.removeUserPackage( packageName, dexUseInfo.getOwnerUserId()) || updated; continue; } ApplicationInfo info = pkg.applicationInfo; Loading @@ -322,7 +324,8 @@ public class DexManager { flags |= StorageManager.FLAG_STORAGE_CE; } else { Slog.e(TAG, "Could not infer CE/DE storage for package " + info.packageName); mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId()); updated = mPackageDexUsage.removeUserPackage( packageName, dexUseInfo.getOwnerUserId()) || updated; continue; } Loading @@ -338,8 +341,13 @@ public class DexManager { } } if (!dexStillExists) { mPackageDexUsage.removeDexFile(packageName, dexPath, dexUseInfo.getOwnerUserId()); updated = mPackageDexUsage.removeDexFile( packageName, dexPath, dexUseInfo.getOwnerUserId()) || updated; } } if (updated) { mPackageDexUsage.maybeWriteAsync(); } } Loading services/core/java/com/android/server/pm/dex/PackageDexUsage.java +4 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> { /** * Remove all the records about package {@code packageName} belonging to user {@code userId}. * @return true if the record was found and actually deleted, * false if the record doesn't exist */ public boolean removeUserPackage(String packageName, int userId) { synchronized (mPackageUseInfoMap) { Loading @@ -402,6 +404,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> { /** * Remove the secondary dex file record belonging to the package {@code packageName} * and user {@code userId}. * @return true if the record was found and actually deleted, * false if the record doesn't exist */ public boolean removeDexFile(String packageName, String dexFile, int userId) { synchronized (mPackageUseInfoMap) { Loading Loading
services/core/java/com/android/server/pm/dex/DexManager.java +11 −3 Original line number Diff line number Diff line Loading @@ -291,6 +291,7 @@ public class DexManager { return; } Set<String> dexFilesToRemove = new HashSet<>(); boolean updated = false; for (Map.Entry<String, DexUseInfo> entry : useInfo.getDexUseInfoMap().entrySet()) { String dexPath = entry.getKey(); DexUseInfo dexUseInfo = entry.getValue(); Loading @@ -311,7 +312,8 @@ public class DexManager { Slog.d(TAG, "Could not find package when compiling secondary dex " + packageName + " for user " + dexUseInfo.getOwnerUserId()); // Update the usage and continue, another user might still have the package. mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId()); updated = mPackageDexUsage.removeUserPackage( packageName, dexUseInfo.getOwnerUserId()) || updated; continue; } ApplicationInfo info = pkg.applicationInfo; Loading @@ -322,7 +324,8 @@ public class DexManager { flags |= StorageManager.FLAG_STORAGE_CE; } else { Slog.e(TAG, "Could not infer CE/DE storage for package " + info.packageName); mPackageDexUsage.removeUserPackage(packageName, dexUseInfo.getOwnerUserId()); updated = mPackageDexUsage.removeUserPackage( packageName, dexUseInfo.getOwnerUserId()) || updated; continue; } Loading @@ -338,8 +341,13 @@ public class DexManager { } } if (!dexStillExists) { mPackageDexUsage.removeDexFile(packageName, dexPath, dexUseInfo.getOwnerUserId()); updated = mPackageDexUsage.removeDexFile( packageName, dexPath, dexUseInfo.getOwnerUserId()) || updated; } } if (updated) { mPackageDexUsage.maybeWriteAsync(); } } Loading
services/core/java/com/android/server/pm/dex/PackageDexUsage.java +4 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> { /** * Remove all the records about package {@code packageName} belonging to user {@code userId}. * @return true if the record was found and actually deleted, * false if the record doesn't exist */ public boolean removeUserPackage(String packageName, int userId) { synchronized (mPackageUseInfoMap) { Loading @@ -402,6 +404,8 @@ public class PackageDexUsage extends AbstractStatsBase<Void> { /** * Remove the secondary dex file record belonging to the package {@code packageName} * and user {@code userId}. * @return true if the record was found and actually deleted, * false if the record doesn't exist */ public boolean removeDexFile(String packageName, String dexFile, int userId) { synchronized (mPackageUseInfoMap) { Loading