Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 631cb811 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Return a copy of the "real" set in AssociationStore" into tm-dev am: 329d5a13

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16940225

Change-Id: I160f835889df521f762091fda02a740c0b31093d
parents 37626e1b 329d5a13
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -171,12 +171,20 @@ class AssociationStoreImpl implements AssociationStore {
        broadcastChange(CHANGE_TYPE_REMOVED, association);
    }

    /**
     * @return a "snapshot" of the current state of the existing associations.
     */
    public @NonNull Collection<AssociationInfo> getAssociations() {
        final Collection<AssociationInfo> allAssociations;
        synchronized (mLock) {
            allAssociations = mIdMap.values();
            // IMPORTANT: make and return a COPY of the mIdMap.values(), NOT a "direct" reference.
            // The HashMap.values() returns a collection which is backed by the HashMap, so changes
            // to the HashMap are reflected in this collection.
            // For us this means that if mIdMap is modified while the iteration over mIdMap.values()
            // is in progress it may lead to "undefined results" (according to the HashMap's
            // documentation) or cause ConcurrentModificationExceptions in the iterator (according
            // to the bugreports...).
            return List.copyOf(mIdMap.values());
        }
        return Collections.unmodifiableCollection(allAssociations);
    }

    public @NonNull List<AssociationInfo> getAssociationsForUser(@UserIdInt int userId) {