diff --git a/services/core/java/com/android/server/pm/dex/DexManager.java b/services/core/java/com/android/server/pm/dex/DexManager.java index cc4b1c20d8b40..964ed98806058 100644 --- a/services/core/java/com/android/server/pm/dex/DexManager.java +++ b/services/core/java/com/android/server/pm/dex/DexManager.java @@ -282,6 +282,7 @@ public class DexManager { return; } Set dexFilesToRemove = new HashSet<>(); + boolean updated = false; for (Map.Entry entry : useInfo.getDexUseInfoMap().entrySet()) { String dexPath = entry.getKey(); DexUseInfo dexUseInfo = entry.getValue(); @@ -302,7 +303,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; @@ -313,7 +315,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; } @@ -329,8 +332,13 @@ public class DexManager { } } if (!dexStillExists) { - mPackageDexUsage.removeDexFile(packageName, dexPath, dexUseInfo.getOwnerUserId()); + updated = mPackageDexUsage.removeDexFile( + packageName, dexPath, dexUseInfo.getOwnerUserId()) || updated; } + + } + if (updated) { + mPackageDexUsage.maybeWriteAsync(); } } diff --git a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java index 26134163a222d..3693bce04eb10 100644 --- a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java +++ b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java @@ -378,6 +378,8 @@ public class PackageDexUsage extends AbstractStatsBase { /** * 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) { @@ -402,6 +404,8 @@ public class PackageDexUsage extends AbstractStatsBase { /** * 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) {