diff options
| author | 2020-12-07 13:40:52 +0000 | |
|---|---|---|
| committer | 2020-12-07 13:40:52 +0000 | |
| commit | b467f2237e6bb76f16e50e9cfd3f8cc3a28eae51 (patch) | |
| tree | c11f0b2111af06501c9891e39ef0050c3e4734a9 | |
| parent | fd8de2082e980f9164b577bd8798cd05a297ab0b (diff) | |
| parent | 16636b7044fdc8410ab232ed4efcba6e3c86b9ab (diff) | |
Merge changes from topic "fail-validation-q" into qt-qpr1-dev
* changes:
Delete orphaned staging directories for staged session on reboot
Clean up staged session data on validation failure
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerService.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerSession.java | 6 |
2 files changed, 10 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 6a47c4c544e8..a013f050ff98 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -287,6 +287,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); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 1976ffd7a7bf..5d4c7d57fdff 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -881,6 +881,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { + mParentSessionId + " and may not be committed directly."); } if (!markAsCommitted(statusReceiver, forTransfer)) { + if (isStaged()) { + // cleanStageDir calls mSessionProvider to get hold of child sessions, which in turn + // needs PackageInstallerService#mSessions lock. So we should not call cleanStageDir + // while holding mLock to avoid lock inversion. + cleanStageDir(); + } return; } if (isMultiPackage()) { |