diff --git a/packages/firebase_core/firebase_core/android/src/main/java/io/flutter/plugins/firebase/core/FlutterFirebasePluginRegistry.java b/packages/firebase_core/firebase_core/android/src/main/java/io/flutter/plugins/firebase/core/FlutterFirebasePluginRegistry.java index 84fdbc7ce279..33b0ec9dfa98 100644 --- a/packages/firebase_core/firebase_core/android/src/main/java/io/flutter/plugins/firebase/core/FlutterFirebasePluginRegistry.java +++ b/packages/firebase_core/firebase_core/android/src/main/java/io/flutter/plugins/firebase/core/FlutterFirebasePluginRegistry.java @@ -28,7 +28,9 @@ public class FlutterFirebasePluginRegistry { */ public static void registerPlugin( String channelName, FlutterFirebasePlugin flutterFirebasePlugin) { - registeredPlugins.put(channelName, flutterFirebasePlugin); + synchronized (registeredPlugins) { + registeredPlugins.put(channelName, flutterFirebasePlugin); + } } /** @@ -46,9 +48,15 @@ static Task> getPluginConstantsForFirebaseApp(FirebaseApp fi cachedThreadPool.execute( () -> { try { - Map pluginConstants = new HashMap<>(registeredPlugins.size()); + Map registeredPluginsSnapshot; + synchronized (registeredPlugins) { + registeredPluginsSnapshot = new HashMap<>(registeredPlugins); + } + + Map pluginConstants = new HashMap<>(registeredPluginsSnapshot.size()); - for (Map.Entry entry : registeredPlugins.entrySet()) { + for (Map.Entry entry : + registeredPluginsSnapshot.entrySet()) { String channelName = entry.getKey(); FlutterFirebasePlugin plugin = entry.getValue(); pluginConstants.put( @@ -77,7 +85,13 @@ static Task didReinitializeFirebaseCore() { cachedThreadPool.execute( () -> { try { - for (Map.Entry entry : registeredPlugins.entrySet()) { + Map registeredPluginsSnapshot; + synchronized (registeredPlugins) { + registeredPluginsSnapshot = new HashMap<>(registeredPlugins); + } + + for (Map.Entry entry : + registeredPluginsSnapshot.entrySet()) { FlutterFirebasePlugin plugin = entry.getValue(); Tasks.await(plugin.didReinitializeFirebaseCore()); }