From 36b76c98d79123f80131aa052699702632526d11 Mon Sep 17 00:00:00 2001 From: Jude Kwashie Date: Wed, 1 Jul 2026 11:15:37 +0000 Subject: [PATCH] fix(core, android): synchronize access to registeredPlugins in FlutterFirebasePluginRegistry --- .../core/FlutterFirebasePluginRegistry.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) 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()); }