Loading services/core/java/com/android/server/pm/ComputerEngine.java +2 −3 Original line number Diff line number Diff line Loading @@ -146,7 +146,6 @@ import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; import com.android.server.pm.verify.domain.DomainVerificationUtils; import com.android.server.uri.UriGrantsManagerInternal; import com.android.server.utils.WatchedArrayMap; import com.android.server.utils.WatchedArraySet; import com.android.server.utils.WatchedLongSparseArray; import com.android.server.utils.WatchedSparseBooleanArray; import com.android.server.utils.WatchedSparseIntArray; Loading Loading @@ -333,7 +332,7 @@ public class ComputerEngine implements Computer { private final InstantAppRegistry mInstantAppRegistry; private final ApplicationInfo mLocalAndroidApplication; private final AppsFilter mAppsFilter; private final WatchedArraySet<String> mFrozenPackages; private final WatchedArrayMap<String, Integer> mFrozenPackages; // Immutable service attribute private final String mAppPredictionServicePackage; Loading Loading @@ -3580,7 +3579,7 @@ public class ComputerEngine implements Computer { return PackageManagerService.PACKAGE_STARTABILITY_NOT_SYSTEM; } if (mFrozenPackages.contains(packageName)) { if (mFrozenPackages.containsKey(packageName)) { return PackageManagerService.PACKAGE_STARTABILITY_FROZEN; } Loading services/core/java/com/android/server/pm/DumpHelper.java +3 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,9 @@ final class DumpHelper { ipw.println("(none)"); } else { for (int i = 0; i < mPm.mFrozenPackages.size(); i++) { ipw.print("package="); ipw.print(mPm.mFrozenPackages.keyAt(i)); ipw.print(", refCounts="); ipw.println(mPm.mFrozenPackages.valueAt(i)); } } Loading services/core/java/com/android/server/pm/MovePackageHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -130,7 +130,7 @@ public final class MovePackageHelper { "Device admin cannot be moved"); } if (mPm.mFrozenPackages.contains(packageName)) { if (mPm.mFrozenPackages.containsKey(packageName)) { throw new PackageManagerException(MOVE_FAILED_OPERATION_PENDING, "Failed to move already frozen package"); } Loading Loading @@ -188,6 +188,7 @@ public final class MovePackageHelper { for (int userId : installedUserIds) { if (StorageManager.isFileEncryptedNativeOrEmulated() && !StorageManager.isUserKeyUnlocked(userId)) { freezer.close(); throw new PackageManagerException(MOVE_FAILED_LOCKED_USER, "User " + userId + " must be unlocked"); } Loading Loading @@ -230,6 +231,7 @@ public final class MovePackageHelper { final IPackageInstallObserver2 installObserver = new IPackageInstallObserver2.Stub() { @Override public void onUserActionRequired(Intent intent) throws RemoteException { freezer.close(); throw new IllegalStateException(); } Loading services/core/java/com/android/server/pm/PackageFreezer.java +9 −5 Original line number Diff line number Diff line Loading @@ -31,8 +31,6 @@ import java.util.concurrent.atomic.AtomicBoolean; final class PackageFreezer implements AutoCloseable { private final String mPackageName; private final boolean mWeFroze; private final AtomicBoolean mClosed = new AtomicBoolean(); private final CloseGuard mCloseGuard = CloseGuard.get(); Loading @@ -48,7 +46,7 @@ final class PackageFreezer implements AutoCloseable { PackageFreezer(PackageManagerService pm) { mPm = pm; mPackageName = null; mWeFroze = false; mClosed.set(true); mCloseGuard.open("close"); } Loading @@ -58,7 +56,9 @@ final class PackageFreezer implements AutoCloseable { mPackageName = packageName; final PackageSetting ps; synchronized (mPm.mLock) { mWeFroze = mPm.mFrozenPackages.add(mPackageName); final int refCounts = mPm.mFrozenPackages .getOrDefault(mPackageName, 0 /* defaultValue */) + 1; mPm.mFrozenPackages.put(mPackageName, refCounts); ps = mPm.mSettings.getPackageLPr(mPackageName); } if (ps != null) { Loading @@ -82,7 +82,11 @@ final class PackageFreezer implements AutoCloseable { mCloseGuard.close(); if (mClosed.compareAndSet(false, true)) { synchronized (mPm.mLock) { if (mWeFroze) { final int refCounts = mPm.mFrozenPackages .getOrDefault(mPackageName, 0 /* defaultValue */) - 1; if (refCounts > 0) { mPm.mFrozenPackages.put(mPackageName, refCounts); } else { mPm.mFrozenPackages.remove(mPackageName); } } Loading services/core/java/com/android/server/pm/PackageManagerService.java +8 −8 Original line number Diff line number Diff line Loading @@ -249,7 +249,6 @@ import com.android.server.utils.TimingsTraceAndSlog; import com.android.server.utils.Watchable; import com.android.server.utils.Watched; import com.android.server.utils.WatchedArrayMap; import com.android.server.utils.WatchedArraySet; import com.android.server.utils.WatchedLongSparseArray; import com.android.server.utils.WatchedSparseBooleanArray; import com.android.server.utils.WatchedSparseIntArray; Loading Loading @@ -646,15 +645,16 @@ public class PackageManagerService extends IPackageManager.Stub final Settings mSettings; /** * Set of package names that are currently "frozen", which means active * surgery is being done on the code/data for that package. The platform * will refuse to launch frozen packages to avoid race conditions. * Map of package names to frozen counts that are currently "frozen", * which means active surgery is being done on the code/data for that * package. The platform will refuse to launch frozen packages to avoid * race conditions. * * @see PackageFreezer */ @GuardedBy("mLock") final WatchedArraySet<String> mFrozenPackages = new WatchedArraySet<>(); private final SnapshotCache<WatchedArraySet<String>> mFrozenPackagesSnapshot = final WatchedArrayMap<String, Integer> mFrozenPackages = new WatchedArrayMap<>(); private final SnapshotCache<WatchedArrayMap<String, Integer>> mFrozenPackagesSnapshot = new SnapshotCache.Auto(mFrozenPackages, mFrozenPackages, "PackageManagerService.mFrozenPackages"); Loading Loading @@ -1016,7 +1016,7 @@ public class PackageManagerService extends IPackageManager.Stub public final AppsFilter appsFilter; public final ComponentResolver componentResolver; public final PackageManagerService service; public final WatchedArraySet<String> frozenPackages; public final WatchedArrayMap<String, Integer> frozenPackages; Snapshot(int type) { if (type == Snapshot.SNAPPED) { Loading Loading @@ -7255,7 +7255,7 @@ public class PackageManagerService extends IPackageManager.Stub */ void checkPackageFrozen(String packageName) { synchronized (mLock) { if (!mFrozenPackages.contains(packageName)) { if (!mFrozenPackages.containsKey(packageName)) { Slog.wtf(TAG, "Expected " + packageName + " to be frozen!", new Throwable()); } } Loading Loading
services/core/java/com/android/server/pm/ComputerEngine.java +2 −3 Original line number Diff line number Diff line Loading @@ -146,7 +146,6 @@ import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; import com.android.server.pm.verify.domain.DomainVerificationUtils; import com.android.server.uri.UriGrantsManagerInternal; import com.android.server.utils.WatchedArrayMap; import com.android.server.utils.WatchedArraySet; import com.android.server.utils.WatchedLongSparseArray; import com.android.server.utils.WatchedSparseBooleanArray; import com.android.server.utils.WatchedSparseIntArray; Loading Loading @@ -333,7 +332,7 @@ public class ComputerEngine implements Computer { private final InstantAppRegistry mInstantAppRegistry; private final ApplicationInfo mLocalAndroidApplication; private final AppsFilter mAppsFilter; private final WatchedArraySet<String> mFrozenPackages; private final WatchedArrayMap<String, Integer> mFrozenPackages; // Immutable service attribute private final String mAppPredictionServicePackage; Loading Loading @@ -3580,7 +3579,7 @@ public class ComputerEngine implements Computer { return PackageManagerService.PACKAGE_STARTABILITY_NOT_SYSTEM; } if (mFrozenPackages.contains(packageName)) { if (mFrozenPackages.containsKey(packageName)) { return PackageManagerService.PACKAGE_STARTABILITY_FROZEN; } Loading
services/core/java/com/android/server/pm/DumpHelper.java +3 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,9 @@ final class DumpHelper { ipw.println("(none)"); } else { for (int i = 0; i < mPm.mFrozenPackages.size(); i++) { ipw.print("package="); ipw.print(mPm.mFrozenPackages.keyAt(i)); ipw.print(", refCounts="); ipw.println(mPm.mFrozenPackages.valueAt(i)); } } Loading
services/core/java/com/android/server/pm/MovePackageHelper.java +3 −1 Original line number Diff line number Diff line Loading @@ -130,7 +130,7 @@ public final class MovePackageHelper { "Device admin cannot be moved"); } if (mPm.mFrozenPackages.contains(packageName)) { if (mPm.mFrozenPackages.containsKey(packageName)) { throw new PackageManagerException(MOVE_FAILED_OPERATION_PENDING, "Failed to move already frozen package"); } Loading Loading @@ -188,6 +188,7 @@ public final class MovePackageHelper { for (int userId : installedUserIds) { if (StorageManager.isFileEncryptedNativeOrEmulated() && !StorageManager.isUserKeyUnlocked(userId)) { freezer.close(); throw new PackageManagerException(MOVE_FAILED_LOCKED_USER, "User " + userId + " must be unlocked"); } Loading Loading @@ -230,6 +231,7 @@ public final class MovePackageHelper { final IPackageInstallObserver2 installObserver = new IPackageInstallObserver2.Stub() { @Override public void onUserActionRequired(Intent intent) throws RemoteException { freezer.close(); throw new IllegalStateException(); } Loading
services/core/java/com/android/server/pm/PackageFreezer.java +9 −5 Original line number Diff line number Diff line Loading @@ -31,8 +31,6 @@ import java.util.concurrent.atomic.AtomicBoolean; final class PackageFreezer implements AutoCloseable { private final String mPackageName; private final boolean mWeFroze; private final AtomicBoolean mClosed = new AtomicBoolean(); private final CloseGuard mCloseGuard = CloseGuard.get(); Loading @@ -48,7 +46,7 @@ final class PackageFreezer implements AutoCloseable { PackageFreezer(PackageManagerService pm) { mPm = pm; mPackageName = null; mWeFroze = false; mClosed.set(true); mCloseGuard.open("close"); } Loading @@ -58,7 +56,9 @@ final class PackageFreezer implements AutoCloseable { mPackageName = packageName; final PackageSetting ps; synchronized (mPm.mLock) { mWeFroze = mPm.mFrozenPackages.add(mPackageName); final int refCounts = mPm.mFrozenPackages .getOrDefault(mPackageName, 0 /* defaultValue */) + 1; mPm.mFrozenPackages.put(mPackageName, refCounts); ps = mPm.mSettings.getPackageLPr(mPackageName); } if (ps != null) { Loading @@ -82,7 +82,11 @@ final class PackageFreezer implements AutoCloseable { mCloseGuard.close(); if (mClosed.compareAndSet(false, true)) { synchronized (mPm.mLock) { if (mWeFroze) { final int refCounts = mPm.mFrozenPackages .getOrDefault(mPackageName, 0 /* defaultValue */) - 1; if (refCounts > 0) { mPm.mFrozenPackages.put(mPackageName, refCounts); } else { mPm.mFrozenPackages.remove(mPackageName); } } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +8 −8 Original line number Diff line number Diff line Loading @@ -249,7 +249,6 @@ import com.android.server.utils.TimingsTraceAndSlog; import com.android.server.utils.Watchable; import com.android.server.utils.Watched; import com.android.server.utils.WatchedArrayMap; import com.android.server.utils.WatchedArraySet; import com.android.server.utils.WatchedLongSparseArray; import com.android.server.utils.WatchedSparseBooleanArray; import com.android.server.utils.WatchedSparseIntArray; Loading Loading @@ -646,15 +645,16 @@ public class PackageManagerService extends IPackageManager.Stub final Settings mSettings; /** * Set of package names that are currently "frozen", which means active * surgery is being done on the code/data for that package. The platform * will refuse to launch frozen packages to avoid race conditions. * Map of package names to frozen counts that are currently "frozen", * which means active surgery is being done on the code/data for that * package. The platform will refuse to launch frozen packages to avoid * race conditions. * * @see PackageFreezer */ @GuardedBy("mLock") final WatchedArraySet<String> mFrozenPackages = new WatchedArraySet<>(); private final SnapshotCache<WatchedArraySet<String>> mFrozenPackagesSnapshot = final WatchedArrayMap<String, Integer> mFrozenPackages = new WatchedArrayMap<>(); private final SnapshotCache<WatchedArrayMap<String, Integer>> mFrozenPackagesSnapshot = new SnapshotCache.Auto(mFrozenPackages, mFrozenPackages, "PackageManagerService.mFrozenPackages"); Loading Loading @@ -1016,7 +1016,7 @@ public class PackageManagerService extends IPackageManager.Stub public final AppsFilter appsFilter; public final ComponentResolver componentResolver; public final PackageManagerService service; public final WatchedArraySet<String> frozenPackages; public final WatchedArrayMap<String, Integer> frozenPackages; Snapshot(int type) { if (type == Snapshot.SNAPPED) { Loading Loading @@ -7255,7 +7255,7 @@ public class PackageManagerService extends IPackageManager.Stub */ void checkPackageFrozen(String packageName) { synchronized (mLock) { if (!mFrozenPackages.contains(packageName)) { if (!mFrozenPackages.containsKey(packageName)) { Slog.wtf(TAG, "Expected " + packageName + " to be frozen!", new Throwable()); } } Loading