From 42dcfab2a93da27ab1fdbde9d236bf96039e65b8 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 27 Sep 2019 18:18:42 -0700 Subject: [PATCH] Stop requiring TurboModuleManager JSIModule on CatalystInstance cleanup Summary: In `CatalystInstanceImpl.destroy()`, we require the TurboModuleManager using the [following lines](https://fburl.com/diffusion/a4y6wbft): ``` final JSIModule turboModuleManager = ReactFeatureFlags.useTurboModules ? mJSIModuleRegistry.getModule(JSIModuleType.TurboModuleManager) : null; ``` For some strange reason, even though `ReactFeatureFlags.useTurboModules` is true, the TurboModuleManager isn't registered with mJSIModuleRegistry. I spent some time looking through the code, but I couldn't figure out why. These lines actually aren't necessary, so it's possible to fix the issue by simply working around it, which is what this diff does. We shouldn't have been double requiring the TurboModuleManager anyways, since `CatalystInstance.java` has a method to set the TurboModuleManager, which we call in `ReactInstanceManager.createReactContext`. ## Alternative approach I could push this diff to the next cut, and instead land a diff that adds debug information to the native crash. At the cost of a week, it may help us figure out why we're seeing the crash. Thoughts? cc fkgozali Reviewed By: fkgozali Differential Revision: D17636604 fbshipit-source-id: ecfff593dc6eb4ec4d5e331348b308bc7ab37966 --- .../react/bridge/CatalystInstanceImpl.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index cd42defc22c..7df88267565 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -23,7 +23,6 @@ import com.facebook.react.bridge.queue.ReactQueueConfigurationImpl; import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec; import com.facebook.react.common.ReactConstants; import com.facebook.react.common.annotations.VisibleForTesting; -import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; import com.facebook.react.turbomodule.core.interfaces.TurboModule; @@ -101,6 +100,7 @@ public class CatalystInstanceImpl implements CatalystInstance { private JavaScriptContextHolder mJavaScriptContextHolder; private @Nullable TurboModuleRegistry mTurboModuleRegistry = null; + private @Nullable JSIModule mTurboModuleManagerJSIModule = null; // C++ parts private final HybridData mHybridData; @@ -353,11 +353,6 @@ public class CatalystInstanceImpl implements CatalystInstance { } } - final JSIModule turboModuleManager = - ReactFeatureFlags.useTurboModules - ? mJSIModuleRegistry.getModule(JSIModuleType.TurboModuleManager) - : null; - getReactQueueConfiguration() .getJSQueueThread() .runOnQueue( @@ -365,8 +360,8 @@ public class CatalystInstanceImpl implements CatalystInstance { @Override public void run() { // We need to destroy the TurboModuleManager on the JS Thread - if (turboModuleManager != null) { - turboModuleManager.onCatalystInstanceDestroy(); + if (mTurboModuleManagerJSIModule != null) { + mTurboModuleManagerJSIModule.onCatalystInstanceDestroy(); } getReactQueueConfiguration() @@ -563,8 +558,9 @@ public class CatalystInstanceImpl implements CatalystInstance { } } - public void setTurboModuleManager(JSIModule getter) { - mTurboModuleRegistry = (TurboModuleRegistry) getter; + public void setTurboModuleManager(JSIModule module) { + mTurboModuleRegistry = (TurboModuleRegistry) module; + mTurboModuleManagerJSIModule = module; } private void decrementPendingJSCalls() {