Implement staged directory clean up for staged install
Staged files should be deleted from /data/staging once installation
is complete, regardless of failure or success. If a session fails
pre-reboot verification, then it can be deleted before reboot.
Bug: 123624108
Test: manual testing
- create two apex files; aosp signed and dev signed
- flash device with internal master
- aosp signed apex file will fail pre-reboot verification
- check that files are deleted in /data/staging
- repeat with multiple package
- dev signed package passes pre-reboot verification
- on reboot, files should be deleted from /data/staging
Change-Id: I44a6cc72de26ad0216942623edb6e279c628d58d
This commit is contained in:
committed by
Shafik Nassar
parent
3deb23fead
commit
5eacf09ea4
@@ -1998,6 +1998,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
mStagedSessionErrorMessage = errorMessage;
|
||||
Slog.d(TAG, "Marking session " + sessionId + " as failed: " + errorMessage);
|
||||
}
|
||||
cleanStageDir();
|
||||
mCallback.onStagedSessionChanged(this);
|
||||
}
|
||||
|
||||
@@ -2009,7 +2010,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
mStagedSessionFailed = false;
|
||||
mStagedSessionErrorCode = SessionInfo.STAGED_SESSION_NO_ERROR;
|
||||
mStagedSessionErrorMessage = "";
|
||||
Slog.d(TAG, "Marking session " + sessionId + " as applied");
|
||||
}
|
||||
cleanStageDir();
|
||||
mCallback.onStagedSessionChanged(this);
|
||||
}
|
||||
|
||||
@@ -2064,6 +2067,19 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
private void cleanStageDir() {
|
||||
if (isMultiPackage()) {
|
||||
for (int childSessionId : getChildSessionIds()) {
|
||||
mSessionProvider.getSession(childSessionId).cleanStageDir();
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath());
|
||||
} catch (InstallerException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dump(IndentingPrintWriter pw) {
|
||||
synchronized (mLock) {
|
||||
dumpLocked(pw);
|
||||
|
||||
Reference in New Issue
Block a user