Skip to content

Commit f94bbd6

Browse files
authored
fix(firestore, android): avoid ConcurrentModificationException by collecting Firestore instances before termination (#17956)
1 parent c83c3ea commit f94bbd6

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/FlutterFirebaseFirestorePlugin.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,15 +207,17 @@ public Task<Void> didReinitializeFirebaseCore() {
207207
() -> {
208208
try {
209209
// Context is ignored by API so we don't send it over even though annotated non-null.
210+
List<FirebaseFirestore> firestoresToTerminate;
210211
synchronized (firestoreInstanceCache) {
211-
for (Map.Entry<FirebaseFirestore, FlutterFirebaseFirestoreExtension> entry :
212-
firestoreInstanceCache.entrySet()) {
213-
FirebaseFirestore firestore = entry.getKey();
212+
// Collect all firestore instances first to avoid ConcurrentModificationException
213+
firestoresToTerminate = new ArrayList<>(firestoreInstanceCache.keySet());
214+
for (FirebaseFirestore firestore : firestoresToTerminate) {
214215
Tasks.await(firestore.terminate());
215216
FlutterFirebaseFirestorePlugin.destroyCachedFirebaseFirestoreInstanceForKey(
216217
firestore);
217218
}
218219
}
220+
219221
removeEventListeners();
220222

221223
taskCompletionSource.setResult(null);

0 commit comments

Comments
 (0)