Loading services/core/java/com/android/server/pm/PackageInstallerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -299,6 +299,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements final ArraySet<File> unclaimedStages = newArraySet( stagingDir.listFiles(sStageFilter)); // We also need to clean up orphaned staging directory for staged sessions final File stagedSessionStagingDir = Environment.getDataStagingDirectory(volumeUuid); unclaimedStages.addAll(newArraySet(stagedSessionStagingDir.listFiles())); // Ignore stages claimed by active sessions for (int i = 0; i < mSessions.size(); i++) { final PackageInstallerSession session = mSessions.valueAt(i); Loading tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,19 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test { assertThat(after).isEqualTo(before); } @Test public void testOrphanedStagingDirectoryGetsCleanedUpOnReboot() throws Exception { //create random directories in /data/app-staging folder getDevice().enableAdbRoot(); getDevice().executeShellCommand("mkdir /data/app-staging/session_123"); getDevice().executeShellCommand("mkdir /data/app-staging/random_name"); getDevice().disableAdbRoot(); assertThat(getStagingDirectories()).isNotEmpty(); getDevice().reboot(); assertThat(getStagingDirectories()).isEmpty(); } private List<String> getStagingDirectories() throws DeviceNotAvailableException { String baseDir = "/data/app-staging"; try { Loading Loading
services/core/java/com/android/server/pm/PackageInstallerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -299,6 +299,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements final ArraySet<File> unclaimedStages = newArraySet( stagingDir.listFiles(sStageFilter)); // We also need to clean up orphaned staging directory for staged sessions final File stagedSessionStagingDir = Environment.getDataStagingDirectory(volumeUuid); unclaimedStages.addAll(newArraySet(stagedSessionStagingDir.listFiles())); // Ignore stages claimed by active sessions for (int i = 0; i < mSessions.size(); i++) { final PackageInstallerSession session = mSessions.valueAt(i); Loading
tests/StagedInstallTest/src/com/android/tests/stagedinstallinternal/host/StagedInstallInternalTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,19 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test { assertThat(after).isEqualTo(before); } @Test public void testOrphanedStagingDirectoryGetsCleanedUpOnReboot() throws Exception { //create random directories in /data/app-staging folder getDevice().enableAdbRoot(); getDevice().executeShellCommand("mkdir /data/app-staging/session_123"); getDevice().executeShellCommand("mkdir /data/app-staging/random_name"); getDevice().disableAdbRoot(); assertThat(getStagingDirectories()).isNotEmpty(); getDevice().reboot(); assertThat(getStagingDirectories()).isEmpty(); } private List<String> getStagingDirectories() throws DeviceNotAvailableException { String baseDir = "/data/app-staging"; try { Loading