summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chun-Wei Wang <wangchun@google.com> 2022-11-22 13:01:44 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-11-22 13:01:44 +0000
commiteb577a7edd445d1aea5fb037ced32db919eecd89 (patch)
tree1bd32edbe49cf67120ef75aff4f1229de38a1a89
parente63e2ea428f61e25c3b9a3a08d1b41e6a4a7e212 (diff)
parente16da5a4e040e8b847910cbf7f7933c1185d7fcf (diff)
Merge "Prevent interleaved verification" into tm-qpr-dev am: e16da5a4e0
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20516271 Change-Id: I2e16e36251319d79eb76a94d0fdcec8789f95b3a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 37bfbb11948a..7c2e3ea426b4 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -366,6 +366,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
@GuardedBy("mLock")
private boolean mStageDirInUse = false;
+ /**
+ * True if the verification is already in progress. This is used to prevent running
+ * verification again while one is already in progress which will break internal states.
+ *
+ * Worker thread only.
+ */
+ private boolean mVerificationInProgress = false;
+
/** Permissions have been accepted by the user (see {@link #setPermissionsResult}) */
@GuardedBy("mLock")
private boolean mPermissionsManuallyAccepted = false;
@@ -2136,6 +2144,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
return;
}
+ if (mVerificationInProgress) {
+ Slog.w(TAG, "Verification is already in progress for session " + sessionId);
+ return;
+ }
+ mVerificationInProgress = true;
+
if (params.isStaged) {
mStagedSession.verifySession();
} else {