Loading core/java/android/os/incremental/IncrementalManager.java +5 −6 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.pm.DataLoaderParams; import android.content.pm.IPackageLoadingProgressCallback; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.util.Slog; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -285,7 +286,7 @@ public final class IncrementalManager { * Unbinds the target dir and deletes the corresponding storage instance. * Deletes the package name and associated storage id from maps. */ public void onPackageRemoved(@NonNull File codeFile) { public void rmPackageDir(@NonNull File codeFile) { try { final String codePath = codeFile.getAbsolutePath(); final IncrementalStorage storage = openStorage(codePath); Loading @@ -294,11 +295,9 @@ public final class IncrementalManager { } mLoadingProgressCallbacks.cleanUpCallbacks(storage); unregisterHealthListener(codePath); // Parent since we bind-mount a folder one level above. mService.deleteBindMount(storage.getId(), codeFile.getParent()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); storage.unBind(codePath); } catch (IOException e) { Slog.w(TAG, "Failed to remove code path", e); } } Loading services/core/java/com/android/server/pm/PackageInstallerSession.java +12 −8 Original line number Diff line number Diff line Loading @@ -4132,6 +4132,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private void destroyInternal() { final IncrementalFileStorages incrementalFileStorages; synchronized (mLock) { mSealed = true; if (!params.isStaged) { Loading @@ -4144,16 +4145,17 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { for (FileBridge bridge : mBridges) { bridge.forceClose(); } if (mIncrementalFileStorages != null) { mIncrementalFileStorages.cleanUp(); incrementalFileStorages = mIncrementalFileStorages; mIncrementalFileStorages = null; } } // For staged sessions, we don't delete the directory where the packages have been copied, // since these packages are supposed to be read on reboot. // Those dirs are deleted when the staged session has reached a final state. if (stageDir != null && !params.isStaged) { try { if (incrementalFileStorages != null) { incrementalFileStorages.cleanUp(); } mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath()); } catch (InstallerException ignored) { } Loading @@ -4171,13 +4173,15 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private void cleanStageDir() { final IncrementalFileStorages incrementalFileStorages; synchronized (mLock) { if (mIncrementalFileStorages != null) { mIncrementalFileStorages.cleanUp(); incrementalFileStorages = mIncrementalFileStorages; mIncrementalFileStorages = null; } } try { if (incrementalFileStorages != null) { incrementalFileStorages.cleanUp(); } mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath()); } catch (InstallerException ignored) { } Loading services/core/java/com/android/server/pm/PackageManagerService.java +14 −12 Original line number Diff line number Diff line Loading @@ -12580,10 +12580,21 @@ public class PackageManagerService extends IPackageManager.Stub @GuardedBy("mInstallLock") void removeCodePathLI(File codePath) { if (codePath.isDirectory()) { File codePathParent = codePath.getParentFile(); final File codePathParent = codePath.getParentFile(); final boolean needRemoveParent = codePathParent.getName().startsWith(RANDOM_DIR_PREFIX); try { final boolean isIncremental = (mIncrementalManager != null && isIncrementalPath( codePath.getAbsolutePath())); if (isIncremental) { if (needRemoveParent) { mIncrementalManager.rmPackageDir(codePathParent); } else { mIncrementalManager.rmPackageDir(codePath); } } mInstaller.rmPackageDir(codePath.getAbsolutePath()); if (codePathParent.getName().startsWith(RANDOM_DIR_PREFIX)) { if (needRemoveParent) { mInstaller.rmPackageDir(codePathParent.getAbsolutePath()); removeCachedResult(codePathParent); } Loading Loading @@ -18126,16 +18137,7 @@ public class PackageManagerService extends IPackageManager.Stub if (codeFile == null || !codeFile.exists()) { return false; } final boolean isIncremental = (mIncrementalManager != null && isIncrementalPath( codeFile.getAbsolutePath())); removeCodePathLI(codeFile); if (isIncremental) { mIncrementalManager.onPackageRemoved(codeFile); } return true; } Loading Loading @@ -24776,7 +24778,7 @@ public class PackageManagerService extends IPackageManager.Stub final int fileToDeleteCount = filesToDelete.size(); for (int i = 0; i < fileToDeleteCount; i++) { File fileToDelete = filesToDelete.get(i); logCriticalInfo(Log.WARN, "Destroying orphaned" + fileToDelete); logCriticalInfo(Log.WARN, "Destroying orphaned at " + fileToDelete); synchronized (mInstallLock) { removeCodePathLI(fileToDelete); } Loading
core/java/android/os/incremental/IncrementalManager.java +5 −6 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.pm.DataLoaderParams; import android.content.pm.IPackageLoadingProgressCallback; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.util.Slog; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; Loading Loading @@ -285,7 +286,7 @@ public final class IncrementalManager { * Unbinds the target dir and deletes the corresponding storage instance. * Deletes the package name and associated storage id from maps. */ public void onPackageRemoved(@NonNull File codeFile) { public void rmPackageDir(@NonNull File codeFile) { try { final String codePath = codeFile.getAbsolutePath(); final IncrementalStorage storage = openStorage(codePath); Loading @@ -294,11 +295,9 @@ public final class IncrementalManager { } mLoadingProgressCallbacks.cleanUpCallbacks(storage); unregisterHealthListener(codePath); // Parent since we bind-mount a folder one level above. mService.deleteBindMount(storage.getId(), codeFile.getParent()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); storage.unBind(codePath); } catch (IOException e) { Slog.w(TAG, "Failed to remove code path", e); } } Loading
services/core/java/com/android/server/pm/PackageInstallerSession.java +12 −8 Original line number Diff line number Diff line Loading @@ -4132,6 +4132,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private void destroyInternal() { final IncrementalFileStorages incrementalFileStorages; synchronized (mLock) { mSealed = true; if (!params.isStaged) { Loading @@ -4144,16 +4145,17 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { for (FileBridge bridge : mBridges) { bridge.forceClose(); } if (mIncrementalFileStorages != null) { mIncrementalFileStorages.cleanUp(); incrementalFileStorages = mIncrementalFileStorages; mIncrementalFileStorages = null; } } // For staged sessions, we don't delete the directory where the packages have been copied, // since these packages are supposed to be read on reboot. // Those dirs are deleted when the staged session has reached a final state. if (stageDir != null && !params.isStaged) { try { if (incrementalFileStorages != null) { incrementalFileStorages.cleanUp(); } mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath()); } catch (InstallerException ignored) { } Loading @@ -4171,13 +4173,15 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } private void cleanStageDir() { final IncrementalFileStorages incrementalFileStorages; synchronized (mLock) { if (mIncrementalFileStorages != null) { mIncrementalFileStorages.cleanUp(); incrementalFileStorages = mIncrementalFileStorages; mIncrementalFileStorages = null; } } try { if (incrementalFileStorages != null) { incrementalFileStorages.cleanUp(); } mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath()); } catch (InstallerException ignored) { } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +14 −12 Original line number Diff line number Diff line Loading @@ -12580,10 +12580,21 @@ public class PackageManagerService extends IPackageManager.Stub @GuardedBy("mInstallLock") void removeCodePathLI(File codePath) { if (codePath.isDirectory()) { File codePathParent = codePath.getParentFile(); final File codePathParent = codePath.getParentFile(); final boolean needRemoveParent = codePathParent.getName().startsWith(RANDOM_DIR_PREFIX); try { final boolean isIncremental = (mIncrementalManager != null && isIncrementalPath( codePath.getAbsolutePath())); if (isIncremental) { if (needRemoveParent) { mIncrementalManager.rmPackageDir(codePathParent); } else { mIncrementalManager.rmPackageDir(codePath); } } mInstaller.rmPackageDir(codePath.getAbsolutePath()); if (codePathParent.getName().startsWith(RANDOM_DIR_PREFIX)) { if (needRemoveParent) { mInstaller.rmPackageDir(codePathParent.getAbsolutePath()); removeCachedResult(codePathParent); } Loading Loading @@ -18126,16 +18137,7 @@ public class PackageManagerService extends IPackageManager.Stub if (codeFile == null || !codeFile.exists()) { return false; } final boolean isIncremental = (mIncrementalManager != null && isIncrementalPath( codeFile.getAbsolutePath())); removeCodePathLI(codeFile); if (isIncremental) { mIncrementalManager.onPackageRemoved(codeFile); } return true; } Loading Loading @@ -24776,7 +24778,7 @@ public class PackageManagerService extends IPackageManager.Stub final int fileToDeleteCount = filesToDelete.size(); for (int i = 0; i < fileToDeleteCount; i++) { File fileToDelete = filesToDelete.get(i); logCriticalInfo(Log.WARN, "Destroying orphaned" + fileToDelete); logCriticalInfo(Log.WARN, "Destroying orphaned at " + fileToDelete); synchronized (mInstallLock) { removeCodePathLI(fileToDelete); }