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
This commit is contained in:
Alex Buynytskyy
2022-12-19 09:53:05 -08:00
parent 392a8cb434
commit bd13599f24

View File

@@ -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) {