From c46353abe41277386e9f22bc406b6d4bdaa89012 Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Tue, 30 Jul 2019 19:54:59 -0700 Subject: [PATCH] Force FbReactInstanceManagerAppJob.IdleExecutor to run in the UIThread Summary: `createReactContextInBackground` must be run on the UI Thread, so we update the DI annotation from `DefaultIdleExecutor` to `ForUiThread` so that happens. Unclear why Infer didn't flag this. Asked [here](https://fb.workplace.com/groups/572076376174315/permalink/2661423100572955/). Also adds an additional thread assert before setting `mHasStartedCreatingInitialContext = true` so that if a similar bug happens in the future, RN won't be completely hosed. Reviewed By: mdvacca Differential Revision: D16574901 fbshipit-source-id: 02ba63979904e9df9ef6d782aa7379cb44702508 --- .../src/main/java/com/facebook/react/ReactInstanceManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 73ff8be37ce..ec98de63758 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -337,6 +337,8 @@ public class ReactInstanceManager { @ThreadConfined(UI) public void createReactContextInBackground() { Log.d(ReactConstants.TAG, "ReactInstanceManager.createReactContextInBackground()"); + UiThreadUtil + .assertOnUiThread(); // Assert before setting mHasStartedCreatingInitialContext = true if (!mHasStartedCreatingInitialContext) { mHasStartedCreatingInitialContext = true; recreateReactContextInBackgroundInner();