Revert "Finish child sessions when verification/setPermission fa..."
Revert submission 16345090-bug207814969
Bug: 208767113
Reason for revert: DroidMonitor-triggered revert due to breakage b/208767113.
Reverted Changes:
I76a2dc48d:Finish child sessions when verification/setPermiss...
I1f9b5f905:Add session cleanup tests for multi-package sessio...
Change-Id: I7366ee43c546c1055c6f85ae291e0820c2fd1636
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 28204ea..55a0c96 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -706,10 +706,9 @@
if (mCommitted.get()) {
mStagingManager.abortCommittedSession(this);
}
- destroy();
+ destroyInternal();
dispatchSessionFinished(INSTALL_FAILED_ABORTED, "Session was abandoned", null);
- maybeFinishChildSessions(INSTALL_FAILED_ABORTED,
- "Session was abandoned because the parent session is abandoned");
+ maybeCleanUpChildSessions();
};
if (mStageDirInUse) {
// Pre-reboot verification is ongoing, not safe to clean up the session yet.
@@ -2132,7 +2131,6 @@
destroy();
// Dispatch message to remove session from PackageInstallerService.
dispatchSessionFinished(error, msg, null);
- maybeFinishChildSessions(error, msg);
}
}
@@ -3648,19 +3646,20 @@
throw new SecurityException("Must be sealed to accept permissions");
}
- PackageInstallerSession root = hasParentSessionId()
- ? mSessionProvider.getSession(getParentSessionId()) : this;
-
if (accepted) {
// Mark and kick off another install pass
synchronized (mLock) {
mPermissionsManuallyAccepted = true;
}
+
+ PackageInstallerSession root =
+ (hasParentSessionId())
+ ? mSessionProvider.getSession(getParentSessionId())
+ : this;
root.mHandler.obtainMessage(MSG_INSTALL).sendToTarget();
} else {
- root.destroy();
- root.dispatchSessionFinished(INSTALL_FAILED_ABORTED, "User rejected permissions", null);
- root.maybeFinishChildSessions(INSTALL_FAILED_ABORTED, "User rejected permissions");
+ destroyInternal();
+ dispatchSessionFinished(INSTALL_FAILED_ABORTED, "User rejected permissions", null);
}
}
@@ -3711,12 +3710,27 @@
}
/**
- * Calls dispatchSessionFinished() on all child sessions with the given error code and
- * error message to prevent orphaned child sessions.
+ * Cleans up the relevant stored files and information of all child sessions.
+ * <p>Cleaning up the stored files and session information is necessary for
+ * preventing the orphan children sessions.
+ * <ol>
+ * <li>To call {@link #destroyInternal()} cleans up the stored files.</li>
+ * <li>To call {@link #dispatchSessionFinished(int, String, Bundle)} to trigger the
+ * procedure to clean up the information in PackageInstallerService.</li>
+ * </ol></p>
*/
- private void maybeFinishChildSessions(int returnCode, String msg) {
- for (PackageInstallerSession child : getChildSessions()) {
- child.dispatchSessionFinished(returnCode, msg, null);
+ private void maybeCleanUpChildSessions() {
+ if (!isMultiPackage()) {
+ return;
+ }
+
+ final List<PackageInstallerSession> childSessions = getChildSessions();
+ final int size = childSessions.size();
+ for (int i = 0; i < size; ++i) {
+ final PackageInstallerSession session = childSessions.get(i);
+ session.destroyInternal();
+ session.dispatchSessionFinished(INSTALL_FAILED_ABORTED, "Session was abandoned"
+ + " because the parent session is abandoned", null);
}
}
@@ -3728,12 +3742,10 @@
if (LOGD) Slog.d(TAG, "Ignoring abandon for staging files are in use");
return;
}
- mDestroyed = true;
+ destroyInternal();
}
- destroy();
dispatchSessionFinished(INSTALL_FAILED_ABORTED, "Session was abandoned", null);
- maybeFinishChildSessions(INSTALL_FAILED_ABORTED,
- "Session was abandoned because the parent session is abandoned");
+ maybeCleanUpChildSessions();
}
private void assertNotChild(String cookie) {