Loading services/core/java/com/android/server/pm/AppDataHelper.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -345,7 +345,7 @@ public class AppDataHelper { final StorageManager storage = mInjector.getSystemService(StorageManager.class); final StorageManager storage = mInjector.getSystemService(StorageManager.class); for (VolumeInfo vol : storage.getWritablePrivateVolumes()) { for (VolumeInfo vol : storage.getWritablePrivateVolumes()) { final String volumeUuid = vol.getFsUuid(); final String volumeUuid = vol.getFsUuid(); synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppsData); reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppsData); } } } } Loading Loading @@ -505,7 +505,7 @@ public class AppDataHelper { storageFlags = StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE; storageFlags = StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE; } } final List<String> deferPackages; final List<String> deferPackages; synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { deferPackages = reconcileAppsDataLI(StorageManager.UUID_PRIVATE_INTERNAL, deferPackages = reconcileAppsDataLI(StorageManager.UUID_PRIVATE_INTERNAL, UserHandle.USER_SYSTEM, storageFlags, true /* migrateAppData */, UserHandle.USER_SYSTEM, storageFlags, true /* migrateAppData */, true /* onlyCoreApps */); true /* onlyCoreApps */); Loading Loading @@ -541,7 +541,7 @@ public class AppDataHelper { count++; count++; } } } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { executeBatchLI(batch); executeBatchLI(batch); } } traceLog.traceEnd(); traceLog.traceEnd(); Loading services/core/java/com/android/server/pm/DeletePackageHelper.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -241,7 +241,7 @@ final class DeletePackageHelper { isInstallerPackage = mPm.mSettings.isInstallerPackage(packageName); isInstallerPackage = mPm.mSettings.isInstallerPackage(packageName); } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageX: pkg=" + packageName + " user=" + userId); if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageX: pkg=" + packageName + " user=" + userId); try (PackageFreezer freezer = mPm.freezePackageForDelete(packageName, freezeUser, try (PackageFreezer freezer = mPm.freezePackageForDelete(packageName, freezeUser, deleteFlags, "deletePackageX", ApplicationExitInfo.REASON_OTHER)) { deleteFlags, "deletePackageX", ApplicationExitInfo.REASON_OTHER)) { Loading Loading @@ -280,7 +280,7 @@ final class DeletePackageHelper { // Delete the resources here after sending the broadcast to let // Delete the resources here after sending the broadcast to let // other processes clean up before deleting resources. // other processes clean up before deleting resources. synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { if (info.mArgs != null) { if (info.mArgs != null) { mRemovePackageHelper.cleanUpResources(info.mArgs.getPackageName(), mRemovePackageHelper.cleanUpResources(info.mArgs.getPackageName(), info.mArgs.getCodeFile(), info.mArgs.getInstructionSets()); info.mArgs.getCodeFile(), info.mArgs.getInstructionSets()); Loading Loading @@ -435,7 +435,7 @@ final class DeletePackageHelper { public void executeDeletePackage(DeletePackageAction action, String packageName, public void executeDeletePackage(DeletePackageAction action, String packageName, boolean deleteCodeAndResources, @NonNull int[] allUserHandles, boolean writeSettings) boolean deleteCodeAndResources, @NonNull int[] allUserHandles, boolean writeSettings) throws SystemDeleteException { throws SystemDeleteException { synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { executeDeletePackageLIF(action, packageName, deleteCodeAndResources, allUserHandles, executeDeletePackageLIF(action, packageName, deleteCodeAndResources, allUserHandles, writeSettings); writeSettings); } } Loading Loading @@ -681,7 +681,7 @@ final class DeletePackageHelper { // Preserve data by setting flag // Preserve data by setting flag flags |= PackageManager.DELETE_KEEP_DATA; flags |= PackageManager.DELETE_KEEP_DATA; } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { deleteInstalledPackageLIF(deletedPs, UserHandle.USER_ALL, true, flags, allUserHandles, deleteInstalledPackageLIF(deletedPs, UserHandle.USER_ALL, true, flags, allUserHandles, outInfo, writeSettings); outInfo, writeSettings); } } Loading services/core/java/com/android/server/pm/FreeStorageHelper.java +23 −31 Original line number Original line Diff line number Diff line Loading @@ -107,12 +107,10 @@ final class FreeStorageHelper { } } // 4. Consider cached app data (above quotas) // 4. Consider cached app data (above quotas) synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2); mPm.mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2); } catch (Installer.InstallerException ignored) { } catch (Installer.InstallerException ignored) { } } } if (file.getUsableSpace() >= bytes) return; if (file.getUsableSpace() >= bytes) return; final Computer computer = mPm.snapshotComputer(); final Computer computer = mPm.snapshotComputer(); Loading Loading @@ -141,13 +139,11 @@ final class FreeStorageHelper { } } // 8. Consider cached app data (below quotas) // 8. Consider cached app data (below quotas) synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(volumeUuid, bytes, mPm.mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA); Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA); } catch (Installer.InstallerException ignored) { } catch (Installer.InstallerException ignored) { } } } if (file.getUsableSpace() >= bytes) return; if (file.getUsableSpace() >= bytes) return; // 9. Consider DropBox entries // 9. Consider DropBox entries Loading Loading @@ -176,13 +172,11 @@ final class FreeStorageHelper { // 12. Clear temp install session files // 12. Clear temp install session files mPm.mInstallerService.freeStageDirs(volumeUuid); mPm.mInstallerService.freeStageDirs(volumeUuid); } else { } else { synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(volumeUuid, bytes, 0); mPm.mInstaller.freeCache(volumeUuid, bytes, 0); } catch (Installer.InstallerException ignored) { } catch (Installer.InstallerException ignored) { } } } } } if (file.getUsableSpace() >= bytes) return; if (file.getUsableSpace() >= bytes) return; throw new IOException("Failed to free " + bytes + " on storage device at " + file); throw new IOException("Failed to free " + bytes + " on storage device at " + file); Loading @@ -197,8 +191,7 @@ final class FreeStorageHelper { final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize(resolvedPath, final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize(resolvedPath, mPackageAbiOverride); mPackageAbiOverride); if (sizeBytes >= 0) { if (sizeBytes >= 0) { synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(null, sizeBytes + lowThreshold, 0); mPm.mInstaller.freeCache(null, sizeBytes + lowThreshold, 0); PackageInfoLite pkgInfoLite = PackageManagerServiceUtils.getMinimalPackageInfo( PackageInfoLite pkgInfoLite = PackageManagerServiceUtils.getMinimalPackageInfo( mContext, pkgLite, resolvedPath, installFlags, mContext, pkgLite, resolvedPath, installFlags, Loading @@ -214,7 +207,6 @@ final class FreeStorageHelper { Slog.w(TAG, "Failed to free cache", e); Slog.w(TAG, "Failed to free cache", e); } } } } } return recommendedInstallLocation; return recommendedInstallLocation; } } Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +20 −28 Original line number Original line Diff line number Diff line Loading @@ -756,7 +756,7 @@ final class InstallPackageHelper { Process.INVALID_UID /* previousAppId */, Process.INVALID_UID /* previousAppId */, permissionParamsBuilder.build(), userId); permissionParamsBuilder.build(), userId); synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { // We don't need to freeze for a brand new install // We don't need to freeze for a brand new install mAppDataHelper.prepareAppDataPostCommitLIF( mAppDataHelper.prepareAppDataPostCommitLIF( pkgSetting, /* previousAppId= */0, new int[] { userId }); pkgSetting, /* previousAppId= */0, new int[] { userId }); Loading Loading @@ -985,13 +985,11 @@ final class InstallPackageHelper { } } void installPackagesTraced(List<InstallRequest> requests) { void installPackagesTraced(List<InstallRequest> requests) { mPm.mInstallLock.lock(); try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackages"); Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackages"); installPackagesLI(requests); installPackagesLI(requests); } finally { } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); mPm.mInstallLock.unlock(); } } } } Loading Loading @@ -2592,7 +2590,8 @@ final class InstallPackageHelper { if (performDexopt) { if (performDexopt) { // dexopt can take long, and ArtService doesn't require installd, so we release // dexopt can take long, and ArtService doesn't require installd, so we release // the lock here and re-acquire the lock after dexopt is finished. // the lock here and re-acquire the lock after dexopt is finished. mPm.mInstallLock.unlock(); PackageManagerTracedLock.RawLock installLock = mPm.mInstallLock.getRawLock(); installLock.unlock(); try { try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt"); Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt"); Loading @@ -2612,7 +2611,7 @@ final class InstallPackageHelper { installRequest.onDexoptFinished(dexOptResult); installRequest.onDexoptFinished(dexOptResult); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } finally { } finally { mPm.mInstallLock.lock(); installLock.lock(); } } } } } } Loading Loading @@ -2921,7 +2920,7 @@ final class InstallPackageHelper { // propagated to all application threads. // propagated to all application threads. mPm.scheduleDeferredNoKillPostDelete(args); mPm.scheduleDeferredNoKillPostDelete(args); if (Flags.improveInstallDontKill()) { if (Flags.improveInstallDontKill()) { synchronized (mPm.mInstallLock) { try (var installLock = mPm.mInstallLock.acquireLock()) { PackageManagerServiceUtils.linkFilesToOldDirs(mPm.mInstaller, PackageManagerServiceUtils.linkFilesToOldDirs(mPm.mInstaller, packageName, pkgSetting.getPath(), pkgSetting.getOldPaths()); packageName, pkgSetting.getPath(), pkgSetting.getOldPaths()); } } Loading Loading @@ -3068,7 +3067,7 @@ final class InstallPackageHelper { @NonNull PackageSetting stubPkgSetting) { @NonNull PackageSetting stubPkgSetting) { final int parseFlags = mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_CHATTY final int parseFlags = mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_CHATTY | ParsingPackageUtils.PARSE_ENFORCE_CODE; | ParsingPackageUtils.PARSE_ENFORCE_CODE; synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { final AndroidPackage pkg; final AndroidPackage pkg; try (PackageFreezer freezer = try (PackageFreezer freezer = mPm.freezePackage(stubPkg.getPackageName(), UserHandle.USER_ALL, mPm.freezePackage(stubPkg.getPackageName(), UserHandle.USER_ALL, Loading Loading @@ -3231,12 +3230,10 @@ final class InstallPackageHelper { } } // Install the system package // Install the system package if (DEBUG_REMOVE) Slog.d(TAG, "Re-installing system package: " + disabledPs); if (DEBUG_REMOVE) Slog.d(TAG, "Re-installing system package: " + disabledPs); try { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { synchronized (mPm.mInstallLock) { final int[] origUsers = outInfo == null ? null : outInfo.mOrigUsers; final int[] origUsers = outInfo == null ? null : outInfo.mOrigUsers; installPackageFromSystemLIF(disabledPs.getPathString(), allUserHandles, installPackageFromSystemLIF(disabledPs.getPathString(), allUserHandles, origUsers, writeSettings); origUsers, writeSettings); } } catch (PackageManagerException e) { } catch (PackageManagerException e) { Slog.w(TAG, "Failed to restore system package:" + deletedPs.getPackageName() + ": " Slog.w(TAG, "Failed to restore system package:" + deletedPs.getPackageName() + ": " + e.getMessage()); + e.getMessage()); Loading Loading @@ -3466,12 +3463,9 @@ final class InstallPackageHelper { if (ps != null) { if (ps != null) { ps.getPkgState().setUpdatedSystemApp(false); ps.getPkgState().setUpdatedSystemApp(false); } } try { final File codePath = new File(pkg.getPath()); final File codePath = new File(pkg.getPath()); synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { initPackageTracedLI(codePath, 0, scanFlags); initPackageTracedLI(codePath, 0, scanFlags); } } catch (PackageManagerException e) { } catch (PackageManagerException e) { Slog.e(TAG, "Failed to parse updated, ex-system package: " Slog.e(TAG, "Failed to parse updated, ex-system package: " + e.getMessage()); + e.getMessage()); Loading Loading @@ -3679,15 +3673,13 @@ final class InstallPackageHelper { } } mPm.mSettings.enableSystemPackageLPw(packageName); mPm.mSettings.enableSystemPackageLPw(packageName); try { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { synchronized (mPm.mInstallLock) { final AndroidPackage newPkg = initPackageTracedLI( final AndroidPackage newPkg = initPackageTracedLI( scanFile, reparseFlags, rescanFlags); scanFile, reparseFlags, rescanFlags); // We rescanned a stub, add it to the list of stubbed system packages // We rescanned a stub, add it to the list of stubbed system packages if (newPkg.isStub()) { if (newPkg.isStub()) { stubSystemApps.add(packageName); stubSystemApps.add(packageName); } } } } catch (PackageManagerException e) { } catch (PackageManagerException e) { Slog.e(TAG, "Failed to parse original system package: " Slog.e(TAG, "Failed to parse original system package: " + e.getMessage()); + e.getMessage()); Loading services/core/java/com/android/server/pm/InstallingSession.java +10 −12 Original line number Original line Diff line number Diff line Loading @@ -370,8 +370,7 @@ class InstallingSession { Slog.d(TAG, "Moving " + mMoveInfo.mPackageName + " from " Slog.d(TAG, "Moving " + mMoveInfo.mPackageName + " from " + mMoveInfo.mFromUuid + " to " + mMoveInfo.mToUuid); + mMoveInfo.mFromUuid + " to " + mMoveInfo.mToUuid); } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.moveCompleteApp(mMoveInfo.mFromUuid, mMoveInfo.mToUuid, mPm.mInstaller.moveCompleteApp(mMoveInfo.mFromUuid, mMoveInfo.mToUuid, mMoveInfo.mPackageName, mMoveInfo.mAppId, mMoveInfo.mSeInfo, mMoveInfo.mPackageName, mMoveInfo.mAppId, mMoveInfo.mSeInfo, mMoveInfo.mTargetSdkVersion, mMoveInfo.mFromCodePath); mMoveInfo.mTargetSdkVersion, mMoveInfo.mFromCodePath); Loading @@ -382,7 +381,6 @@ class InstallingSession { Slog.w(TAG, errorMessage, e); Slog.w(TAG, errorMessage, e); return PackageManager.INSTALL_FAILED_INTERNAL_ERROR; return PackageManager.INSTALL_FAILED_INTERNAL_ERROR; } } } final String toPathName = new File(mMoveInfo.mFromCodePath).getName(); final String toPathName = new File(mMoveInfo.mFromCodePath).getName(); request.setCodeFile( request.setCodeFile( Loading Loading
services/core/java/com/android/server/pm/AppDataHelper.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -345,7 +345,7 @@ public class AppDataHelper { final StorageManager storage = mInjector.getSystemService(StorageManager.class); final StorageManager storage = mInjector.getSystemService(StorageManager.class); for (VolumeInfo vol : storage.getWritablePrivateVolumes()) { for (VolumeInfo vol : storage.getWritablePrivateVolumes()) { final String volumeUuid = vol.getFsUuid(); final String volumeUuid = vol.getFsUuid(); synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppsData); reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppsData); } } } } Loading Loading @@ -505,7 +505,7 @@ public class AppDataHelper { storageFlags = StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE; storageFlags = StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE; } } final List<String> deferPackages; final List<String> deferPackages; synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { deferPackages = reconcileAppsDataLI(StorageManager.UUID_PRIVATE_INTERNAL, deferPackages = reconcileAppsDataLI(StorageManager.UUID_PRIVATE_INTERNAL, UserHandle.USER_SYSTEM, storageFlags, true /* migrateAppData */, UserHandle.USER_SYSTEM, storageFlags, true /* migrateAppData */, true /* onlyCoreApps */); true /* onlyCoreApps */); Loading Loading @@ -541,7 +541,7 @@ public class AppDataHelper { count++; count++; } } } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { executeBatchLI(batch); executeBatchLI(batch); } } traceLog.traceEnd(); traceLog.traceEnd(); Loading
services/core/java/com/android/server/pm/DeletePackageHelper.java +4 −4 Original line number Original line Diff line number Diff line Loading @@ -241,7 +241,7 @@ final class DeletePackageHelper { isInstallerPackage = mPm.mSettings.isInstallerPackage(packageName); isInstallerPackage = mPm.mSettings.isInstallerPackage(packageName); } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageX: pkg=" + packageName + " user=" + userId); if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageX: pkg=" + packageName + " user=" + userId); try (PackageFreezer freezer = mPm.freezePackageForDelete(packageName, freezeUser, try (PackageFreezer freezer = mPm.freezePackageForDelete(packageName, freezeUser, deleteFlags, "deletePackageX", ApplicationExitInfo.REASON_OTHER)) { deleteFlags, "deletePackageX", ApplicationExitInfo.REASON_OTHER)) { Loading Loading @@ -280,7 +280,7 @@ final class DeletePackageHelper { // Delete the resources here after sending the broadcast to let // Delete the resources here after sending the broadcast to let // other processes clean up before deleting resources. // other processes clean up before deleting resources. synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { if (info.mArgs != null) { if (info.mArgs != null) { mRemovePackageHelper.cleanUpResources(info.mArgs.getPackageName(), mRemovePackageHelper.cleanUpResources(info.mArgs.getPackageName(), info.mArgs.getCodeFile(), info.mArgs.getInstructionSets()); info.mArgs.getCodeFile(), info.mArgs.getInstructionSets()); Loading Loading @@ -435,7 +435,7 @@ final class DeletePackageHelper { public void executeDeletePackage(DeletePackageAction action, String packageName, public void executeDeletePackage(DeletePackageAction action, String packageName, boolean deleteCodeAndResources, @NonNull int[] allUserHandles, boolean writeSettings) boolean deleteCodeAndResources, @NonNull int[] allUserHandles, boolean writeSettings) throws SystemDeleteException { throws SystemDeleteException { synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { executeDeletePackageLIF(action, packageName, deleteCodeAndResources, allUserHandles, executeDeletePackageLIF(action, packageName, deleteCodeAndResources, allUserHandles, writeSettings); writeSettings); } } Loading Loading @@ -681,7 +681,7 @@ final class DeletePackageHelper { // Preserve data by setting flag // Preserve data by setting flag flags |= PackageManager.DELETE_KEEP_DATA; flags |= PackageManager.DELETE_KEEP_DATA; } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { deleteInstalledPackageLIF(deletedPs, UserHandle.USER_ALL, true, flags, allUserHandles, deleteInstalledPackageLIF(deletedPs, UserHandle.USER_ALL, true, flags, allUserHandles, outInfo, writeSettings); outInfo, writeSettings); } } Loading
services/core/java/com/android/server/pm/FreeStorageHelper.java +23 −31 Original line number Original line Diff line number Diff line Loading @@ -107,12 +107,10 @@ final class FreeStorageHelper { } } // 4. Consider cached app data (above quotas) // 4. Consider cached app data (above quotas) synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2); mPm.mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2); } catch (Installer.InstallerException ignored) { } catch (Installer.InstallerException ignored) { } } } if (file.getUsableSpace() >= bytes) return; if (file.getUsableSpace() >= bytes) return; final Computer computer = mPm.snapshotComputer(); final Computer computer = mPm.snapshotComputer(); Loading Loading @@ -141,13 +139,11 @@ final class FreeStorageHelper { } } // 8. Consider cached app data (below quotas) // 8. Consider cached app data (below quotas) synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(volumeUuid, bytes, mPm.mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA); Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA); } catch (Installer.InstallerException ignored) { } catch (Installer.InstallerException ignored) { } } } if (file.getUsableSpace() >= bytes) return; if (file.getUsableSpace() >= bytes) return; // 9. Consider DropBox entries // 9. Consider DropBox entries Loading Loading @@ -176,13 +172,11 @@ final class FreeStorageHelper { // 12. Clear temp install session files // 12. Clear temp install session files mPm.mInstallerService.freeStageDirs(volumeUuid); mPm.mInstallerService.freeStageDirs(volumeUuid); } else { } else { synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(volumeUuid, bytes, 0); mPm.mInstaller.freeCache(volumeUuid, bytes, 0); } catch (Installer.InstallerException ignored) { } catch (Installer.InstallerException ignored) { } } } } } if (file.getUsableSpace() >= bytes) return; if (file.getUsableSpace() >= bytes) return; throw new IOException("Failed to free " + bytes + " on storage device at " + file); throw new IOException("Failed to free " + bytes + " on storage device at " + file); Loading @@ -197,8 +191,7 @@ final class FreeStorageHelper { final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize(resolvedPath, final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize(resolvedPath, mPackageAbiOverride); mPackageAbiOverride); if (sizeBytes >= 0) { if (sizeBytes >= 0) { synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.freeCache(null, sizeBytes + lowThreshold, 0); mPm.mInstaller.freeCache(null, sizeBytes + lowThreshold, 0); PackageInfoLite pkgInfoLite = PackageManagerServiceUtils.getMinimalPackageInfo( PackageInfoLite pkgInfoLite = PackageManagerServiceUtils.getMinimalPackageInfo( mContext, pkgLite, resolvedPath, installFlags, mContext, pkgLite, resolvedPath, installFlags, Loading @@ -214,7 +207,6 @@ final class FreeStorageHelper { Slog.w(TAG, "Failed to free cache", e); Slog.w(TAG, "Failed to free cache", e); } } } } } return recommendedInstallLocation; return recommendedInstallLocation; } } Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +20 −28 Original line number Original line Diff line number Diff line Loading @@ -756,7 +756,7 @@ final class InstallPackageHelper { Process.INVALID_UID /* previousAppId */, Process.INVALID_UID /* previousAppId */, permissionParamsBuilder.build(), userId); permissionParamsBuilder.build(), userId); synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { // We don't need to freeze for a brand new install // We don't need to freeze for a brand new install mAppDataHelper.prepareAppDataPostCommitLIF( mAppDataHelper.prepareAppDataPostCommitLIF( pkgSetting, /* previousAppId= */0, new int[] { userId }); pkgSetting, /* previousAppId= */0, new int[] { userId }); Loading Loading @@ -985,13 +985,11 @@ final class InstallPackageHelper { } } void installPackagesTraced(List<InstallRequest> requests) { void installPackagesTraced(List<InstallRequest> requests) { mPm.mInstallLock.lock(); try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackages"); Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackages"); installPackagesLI(requests); installPackagesLI(requests); } finally { } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); mPm.mInstallLock.unlock(); } } } } Loading Loading @@ -2592,7 +2590,8 @@ final class InstallPackageHelper { if (performDexopt) { if (performDexopt) { // dexopt can take long, and ArtService doesn't require installd, so we release // dexopt can take long, and ArtService doesn't require installd, so we release // the lock here and re-acquire the lock after dexopt is finished. // the lock here and re-acquire the lock after dexopt is finished. mPm.mInstallLock.unlock(); PackageManagerTracedLock.RawLock installLock = mPm.mInstallLock.getRawLock(); installLock.unlock(); try { try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt"); Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt"); Loading @@ -2612,7 +2611,7 @@ final class InstallPackageHelper { installRequest.onDexoptFinished(dexOptResult); installRequest.onDexoptFinished(dexOptResult); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } finally { } finally { mPm.mInstallLock.lock(); installLock.lock(); } } } } } } Loading Loading @@ -2921,7 +2920,7 @@ final class InstallPackageHelper { // propagated to all application threads. // propagated to all application threads. mPm.scheduleDeferredNoKillPostDelete(args); mPm.scheduleDeferredNoKillPostDelete(args); if (Flags.improveInstallDontKill()) { if (Flags.improveInstallDontKill()) { synchronized (mPm.mInstallLock) { try (var installLock = mPm.mInstallLock.acquireLock()) { PackageManagerServiceUtils.linkFilesToOldDirs(mPm.mInstaller, PackageManagerServiceUtils.linkFilesToOldDirs(mPm.mInstaller, packageName, pkgSetting.getPath(), pkgSetting.getOldPaths()); packageName, pkgSetting.getPath(), pkgSetting.getOldPaths()); } } Loading Loading @@ -3068,7 +3067,7 @@ final class InstallPackageHelper { @NonNull PackageSetting stubPkgSetting) { @NonNull PackageSetting stubPkgSetting) { final int parseFlags = mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_CHATTY final int parseFlags = mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_CHATTY | ParsingPackageUtils.PARSE_ENFORCE_CODE; | ParsingPackageUtils.PARSE_ENFORCE_CODE; synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { final AndroidPackage pkg; final AndroidPackage pkg; try (PackageFreezer freezer = try (PackageFreezer freezer = mPm.freezePackage(stubPkg.getPackageName(), UserHandle.USER_ALL, mPm.freezePackage(stubPkg.getPackageName(), UserHandle.USER_ALL, Loading Loading @@ -3231,12 +3230,10 @@ final class InstallPackageHelper { } } // Install the system package // Install the system package if (DEBUG_REMOVE) Slog.d(TAG, "Re-installing system package: " + disabledPs); if (DEBUG_REMOVE) Slog.d(TAG, "Re-installing system package: " + disabledPs); try { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { synchronized (mPm.mInstallLock) { final int[] origUsers = outInfo == null ? null : outInfo.mOrigUsers; final int[] origUsers = outInfo == null ? null : outInfo.mOrigUsers; installPackageFromSystemLIF(disabledPs.getPathString(), allUserHandles, installPackageFromSystemLIF(disabledPs.getPathString(), allUserHandles, origUsers, writeSettings); origUsers, writeSettings); } } catch (PackageManagerException e) { } catch (PackageManagerException e) { Slog.w(TAG, "Failed to restore system package:" + deletedPs.getPackageName() + ": " Slog.w(TAG, "Failed to restore system package:" + deletedPs.getPackageName() + ": " + e.getMessage()); + e.getMessage()); Loading Loading @@ -3466,12 +3463,9 @@ final class InstallPackageHelper { if (ps != null) { if (ps != null) { ps.getPkgState().setUpdatedSystemApp(false); ps.getPkgState().setUpdatedSystemApp(false); } } try { final File codePath = new File(pkg.getPath()); final File codePath = new File(pkg.getPath()); synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { initPackageTracedLI(codePath, 0, scanFlags); initPackageTracedLI(codePath, 0, scanFlags); } } catch (PackageManagerException e) { } catch (PackageManagerException e) { Slog.e(TAG, "Failed to parse updated, ex-system package: " Slog.e(TAG, "Failed to parse updated, ex-system package: " + e.getMessage()); + e.getMessage()); Loading Loading @@ -3679,15 +3673,13 @@ final class InstallPackageHelper { } } mPm.mSettings.enableSystemPackageLPw(packageName); mPm.mSettings.enableSystemPackageLPw(packageName); try { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { synchronized (mPm.mInstallLock) { final AndroidPackage newPkg = initPackageTracedLI( final AndroidPackage newPkg = initPackageTracedLI( scanFile, reparseFlags, rescanFlags); scanFile, reparseFlags, rescanFlags); // We rescanned a stub, add it to the list of stubbed system packages // We rescanned a stub, add it to the list of stubbed system packages if (newPkg.isStub()) { if (newPkg.isStub()) { stubSystemApps.add(packageName); stubSystemApps.add(packageName); } } } } catch (PackageManagerException e) { } catch (PackageManagerException e) { Slog.e(TAG, "Failed to parse original system package: " Slog.e(TAG, "Failed to parse original system package: " + e.getMessage()); + e.getMessage()); Loading
services/core/java/com/android/server/pm/InstallingSession.java +10 −12 Original line number Original line Diff line number Diff line Loading @@ -370,8 +370,7 @@ class InstallingSession { Slog.d(TAG, "Moving " + mMoveInfo.mPackageName + " from " Slog.d(TAG, "Moving " + mMoveInfo.mPackageName + " from " + mMoveInfo.mFromUuid + " to " + mMoveInfo.mToUuid); + mMoveInfo.mFromUuid + " to " + mMoveInfo.mToUuid); } } synchronized (mPm.mInstallLock) { try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) { try { mPm.mInstaller.moveCompleteApp(mMoveInfo.mFromUuid, mMoveInfo.mToUuid, mPm.mInstaller.moveCompleteApp(mMoveInfo.mFromUuid, mMoveInfo.mToUuid, mMoveInfo.mPackageName, mMoveInfo.mAppId, mMoveInfo.mSeInfo, mMoveInfo.mPackageName, mMoveInfo.mAppId, mMoveInfo.mSeInfo, mMoveInfo.mTargetSdkVersion, mMoveInfo.mFromCodePath); mMoveInfo.mTargetSdkVersion, mMoveInfo.mFromCodePath); Loading @@ -382,7 +381,6 @@ class InstallingSession { Slog.w(TAG, errorMessage, e); Slog.w(TAG, errorMessage, e); return PackageManager.INSTALL_FAILED_INTERNAL_ERROR; return PackageManager.INSTALL_FAILED_INTERNAL_ERROR; } } } final String toPathName = new File(mMoveInfo.mFromCodePath).getName(); final String toPathName = new File(mMoveInfo.mFromCodePath).getName(); request.setCodeFile( request.setCodeFile( Loading