diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 31eb324402c50..65d8150dd452a 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2029,6 +2029,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { mStagedSessionErrorMessage = errorMessage; Slog.d(TAG, "Marking session " + sessionId + " as failed: " + errorMessage); } + cleanStageDir(); mCallback.onStagedSessionChanged(this); } @@ -2040,7 +2041,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); } @@ -2095,6 +2098,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);