From b474be6cc81902b66c7f8f4fbc74ae0ec103560d Mon Sep 17 00:00:00 2001 From: Albert Sun Date: Fri, 5 Feb 2021 10:13:01 -0800 Subject: [PATCH] Back out "Make NativeModules immediately initializable" Summary: This caused a few apps to crash on launch. Changelog: [Android][Fixed] - Crashes due to "Make NativeModules immediately initializable" Reviewed By: olegbl Differential Revision: D26278594 fbshipit-source-id: 969a3dc49a843366c4ae6ed19a9233d1e6f39b13 --- .../main/java/com/facebook/react/bridge/ModuleHolder.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.java index d674438d57517b..0398c85a4731b1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.java @@ -50,6 +50,7 @@ public class ModuleHolder { private @Nullable @GuardedBy("this") NativeModule mModule; // These are used to communicate phases of creation and initialization across threads + private @GuardedBy("this") boolean mInitializable; private @GuardedBy("this") boolean mIsCreating; private @GuardedBy("this") boolean mIsInitializing; @@ -88,6 +89,7 @@ public ModuleHolder(NativeModule nativeModule) { boolean shouldInitializeNow = false; NativeModule module = null; synchronized (this) { + mInitializable = true; if (mModule != null) { Assertions.assertCondition(!mIsInitializing); shouldInitializeNow = true; @@ -191,7 +193,7 @@ private NativeModule create() { boolean shouldInitializeNow = false; synchronized (this) { mModule = module; - if (!mIsInitializing) { + if (mInitializable && !mIsInitializing) { shouldInitializeNow = true; } } @@ -225,7 +227,7 @@ private void doInitialize(NativeModule module) { boolean shouldInitialize = false; // Check to see if another thread is initializing the object, if not claim the responsibility synchronized (this) { - if (!mIsInitializing) { + if (mInitializable && !mIsInitializing) { shouldInitialize = true; mIsInitializing = true; }