summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Buynytskyy <alexbuy@google.com> 2022-12-19 09:53:05 -0800
committer Alex Buynytskyy <alexbuy@google.com> 2022-12-19 22:48:30 +0000
commitbd13599f246cc7ca353c61c1c06b7b0c21dfb60c (patch)
treebc4a532396d73ef85ab796412b20fb166fb5a0aa
parent392a8cb434eebbecc45f2e5b481def776eea061c (diff)
Remove extra mLock that potentually caused regression.
Bug: 261620170 Fixed: 261620170 Test: atest android.content.pm.PackageInstallerBenchmark#commit_threeMultiplePackageSessions_untilFinishBenchmark --iterations 3 Change-Id: I45d72a4b6e7f685fa1a49fb37e69e8b2ce1a3695
-rw-r--r--services/core/java/com/android/server/pm/Settings.java34
1 files changed, 14 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 7fec0eb00fe4..da9a742eddfd 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -165,6 +165,7 @@ import java.util.Objects;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
/**
@@ -5634,7 +5635,7 @@ public final class Settings implements Watchable, Snappable {
@GuardedBy("mLock")
// Tracking the mutations that haven't yet been written to legacy state.
// This avoids unnecessary work when writing settings for multiple users.
- private boolean mIsLegacyPermissionStateStale = false;
+ private AtomicBoolean mIsLegacyPermissionStateStale = new AtomicBoolean(false);
@GuardedBy("mLock")
// The mapping keys are user ids.
@@ -5725,8 +5726,8 @@ public final class Settings implements Watchable, Snappable {
}
public void writeStateForUserAsync(int userId) {
+ mIsLegacyPermissionStateStale.set(true);
synchronized (mLock) {
- mIsLegacyPermissionStateStale = true;
final long currentTimeMillis = SystemClock.uptimeMillis();
final long writePermissionDelayMillis = nextWritePermissionDelayMillis();
@@ -5773,24 +5774,18 @@ public final class Settings implements Watchable, Snappable {
}
Runnable writer = () -> {
- final int version;
- final String fingerprint;
- final boolean isLegacyPermissionStateStale;
- synchronized (mLock) {
- version = mVersions.get(userId, INITIAL_VERSION);
- fingerprint = mFingerprints.get(userId);
- isLegacyPermissionStateStale = mIsLegacyPermissionStateStale;
- mIsLegacyPermissionStateStale = false;
- }
+ boolean isLegacyPermissionStateStale = mIsLegacyPermissionStateStale.getAndSet(
+ false);
- final RuntimePermissionsState runtimePermissions;
+ final Map<String, List<RuntimePermissionsState.PermissionState>>
+ packagePermissions = new ArrayMap<>();
+ final Map<String, List<RuntimePermissionsState.PermissionState>>
+ sharedUserPermissions = new ArrayMap<>();
synchronized (pmLock) {
if (sync || isLegacyPermissionStateStale) {
legacyPermissionDataProvider.writeLegacyPermissionStateTEMP();
}
- Map<String, List<RuntimePermissionsState.PermissionState>> packagePermissions =
- new ArrayMap<>();
int packagesSize = packageStates.size();
for (int i = 0; i < packagesSize; i++) {
String packageName = packageStates.keyAt(i);
@@ -5810,9 +5805,6 @@ public final class Settings implements Watchable, Snappable {
}
}
- Map<String, List<RuntimePermissionsState.PermissionState>>
- sharedUserPermissions =
- new ArrayMap<>();
final int sharedUsersSize = sharedUsers.size();
for (int i = 0; i < sharedUsersSize; i++) {
String sharedUserName = sharedUsers.keyAt(i);
@@ -5822,11 +5814,13 @@ public final class Settings implements Watchable, Snappable {
sharedUserSetting.getLegacyPermissionState(), userId);
sharedUserPermissions.put(sharedUserName, permissions);
}
-
- runtimePermissions = new RuntimePermissionsState(version,
- fingerprint, packagePermissions, sharedUserPermissions);
}
synchronized (mLock) {
+ int version = mVersions.get(userId, INITIAL_VERSION);
+ String fingerprint = mFingerprints.get(userId);
+
+ RuntimePermissionsState runtimePermissions = new RuntimePermissionsState(
+ version, fingerprint, packagePermissions, sharedUserPermissions);
mPendingStatesToWrite.put(userId, runtimePermissions);
}
if (pmHandler != null) {