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;      }      /** |