Merge "Return a copy of the "real" set in AssociationStore" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-02-21 16:19:19 +00:00
committed by Android (Google) Code Review

View File

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