diff options
| -rw-r--r-- | services/core/java/com/android/server/role/RoleUserState.java | 25 |
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; } /** |