From a480346ee048d8f5c6634a7868460e1940a95f24 Mon Sep 17 00:00:00 2001 From: Lulu Wu Date: Mon, 26 Jul 2021 03:31:51 -0700 Subject: [PATCH] Make initializeMessageQueueThreads() thread safe Summary: **Context:** Issue: ```java.lang.IllegalStateException: Message queue threads already initialized at com.facebook.react.bridge.ReactContext.initializeMessageQueueThreads(ReactContext.java:100) ``` Possible root cause: 1, ReactContext.initializeMessageQueueThreads() can be called from different threads, so it's not thread safe 2, ReactContext.initializeMessageQueueThreads() is called again without detroying the threads. **Fix:** Make initializeMessageQueueThreads() thread safe. If this won't fix T93983690, I'll continue investigating with possible root cause 2. Changelog: [Android][Changed] - Make initializeMessageQueueThreads() thread safe Reviewed By: GijsWeterings Differential Revision: D29877386 fbshipit-source-id: 11b32c7184e9e8d6f882474fd607538df12276b7 --- .../main/java/com/facebook/react/bridge/ReactContext.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java index 9caaeff3508..b0763692435 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java @@ -89,11 +89,8 @@ public class ReactContext extends ContextWrapper { initializeMessageQueueThreads(queueConfig); } - /** - * Initialize message queue threads using a ReactQueueConfiguration. TODO (janzer) T43898341 Make - * this package instead of public - */ - public void initializeMessageQueueThreads(ReactQueueConfiguration queueConfig) { + /** Initialize message queue threads using a ReactQueueConfiguration. */ + public synchronized void initializeMessageQueueThreads(ReactQueueConfiguration queueConfig) { if (mUiMessageQueueThread != null || mNativeModulesMessageQueueThread != null || mJSMessageQueueThread != null) {