diff options
| author | Felka Chang <felkachang@google.com> | 2020-08-24 15:03:43 +0800 |
|---|---|---|
| committer | Felka Chang <felkachang@google.com> | 2020-10-30 18:10:20 +0800 |
| commit | 18d20709e0a238d3a571dc3d852e682e64706f56 (patch) | |
| tree | 5195e928522e616199c253dad0865bd43e54c717 /core/java/android | |
| parent | 9a095a4e40f4dac1e324fe31b91d65b1095ab05f (diff) | |
Fix the orphan child session after abandoning the parent session
In the multipackage staged session set condition, whenever a committed
parent session called abandon(), only calling dispatchSessionFinished()
on the parent session would leave its children session as the orphan
child sessions. The child sessions aren't handled very well and they
would be never handled if the installer applications forget to handle
them.
The solution is to notify the each child session in this multipackage
session after the parent session is abandoned. And, to add the
com.android.tests.atomicinstall.SessionAbandonBehaviorTest to verify the
behavior.
Test: atest StagedInstallInternalTest
Test: atest -p \
frameworks/base/services/core/java/com/android/server/pm/TEST_MAPPING
Test: atest CtsAtomicInstallTestCases
Test: # monitor the log after atest stagedInstallInternalTest and reboot.
Bug: 164964410
Change-Id: I23dabf7da099baebed63e9f9fc73383984015070
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/pm/PackageInstaller.java | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index e2f85282948a..f59852dbff0b 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -1356,7 +1356,9 @@ public class PackageInstaller { * Completely abandon this session, destroying all staged data and * rendering it invalid. Abandoned sessions will be reported to * {@link SessionCallback} listeners as failures. This is equivalent to - * opening the session and calling {@link Session#abandon()}. + * {@link #abandonSession(int)}. + * <p>If the parent is abandoned, all children will also be abandoned. Any written data + * would be destroyed and the created {@link Session} information will be discarded.</p> */ public void abandon() { try { @@ -1419,7 +1421,8 @@ public class PackageInstaller { * when this session is committed. * * <p>If the parent is staged or has rollback enabled, all children must have - * the same properties. + * the same properties.</p> + * <p>If the parent is abandoned, all children will also be abandoned.</p> * * @param sessionId the session ID to add to this multi-package session. */ |
