diff options
| author | 2022-12-19 09:53:05 -0800 | |
|---|---|---|
| committer | 2022-12-19 22:48:30 +0000 | |
| commit | bd13599f246cc7ca353c61c1c06b7b0c21dfb60c (patch) | |
| tree | bc4a532396d73ef85ab796412b20fb166fb5a0aa | |
| parent | 392a8cb434eebbecc45f2e5b481def776eea061c (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.java | 34 |
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) { |