summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-02-01 21:49:39 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-02-01 21:49:39 +0000
commitf81dc1cfbcc99d48fb64435e7d27ab38491a75d8 (patch)
tree428b0fad926e1ff419ce74a4b249ebc31ecd3dbb
parent180a0e1305d9282f2201c3325777793f1ea93648 (diff)
parent538b361143578779d923da9d7bd383f789c1101f (diff)
Merge "Do not synchronize if not necessary"
-rw-r--r--services/core/java/com/android/server/role/RoleUserState.java25
1 files changed, 15 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/role/RoleUserState.java b/services/core/java/com/android/server/role/RoleUserState.java
index bc68dded2dfe..5030e349a485 100644
--- a/services/core/java/com/android/server/role/RoleUserState.java
+++ b/services/core/java/com/android/server/role/RoleUserState.java
@@ -376,7 +376,7 @@ public class RoleUserState {
version = mVersion;
packagesHash = mPackagesHash;
- roles = getRoleHolders();
+ roles = snapshotRolesLocked();
}
AtomicFile atomicFile = new AtomicFile(getFile(mUserId), "roles-" + mUserId);
@@ -541,7 +541,7 @@ public class RoleUserState {
version = mVersion;
packagesHash = mPackagesHash;
- roles = getRoleHolders();
+ roles = snapshotRolesLocked();
}
long fieldToken = dumpOutputStream.start(fieldName, fieldId);
@@ -578,16 +578,21 @@ public class RoleUserState {
@NonNull
public ArrayMap<String, ArraySet<String>> getRoleHolders() {
synchronized (mLock) {
- ArrayMap<String, ArraySet<String>> roles = new ArrayMap<>();
- for (int i = 0, size = CollectionUtils.size(mRoles); i < size; ++i) {
- String roleName = mRoles.keyAt(i);
- ArraySet<String> roleHolders = mRoles.valueAt(i);
+ return snapshotRolesLocked();
+ }
+ }
- roleHolders = new ArraySet<>(roleHolders);
- roles.put(roleName, roleHolders);
- }
- return roles;
+ @GuardedBy("mLock")
+ private ArrayMap<String, ArraySet<String>> snapshotRolesLocked() {
+ ArrayMap<String, ArraySet<String>> roles = new ArrayMap<>();
+ for (int i = 0, size = CollectionUtils.size(mRoles); i < size; ++i) {
+ String roleName = mRoles.keyAt(i);
+ ArraySet<String> roleHolders = mRoles.valueAt(i);
+
+ roleHolders = new ArraySet<>(roleHolders);
+ roles.put(roleName, roleHolders);
}
+ return roles;
}
/**