From bbe0c45c19af26af9955112ced3fa0d7bd786500 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Wed, 15 Feb 2017 06:12:44 -0800 Subject: [PATCH] Prevent deadlock after bridge reload Reviewed By: dcaspi Differential Revision: D4551097 fbshipit-source-id: 33b43b2691d4e595d3c09c9a5b101ce458c4d6d7 --- React/CxxBridge/RCTCxxBridge.mm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index e59dbb755..7ecb7f37f 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -25,9 +25,6 @@ #import #import #import -#ifdef WITH_FBSYSTRACE -#import -#endif #import #import #import @@ -47,6 +44,10 @@ #import "RCTNativeModule.h" #import "RCTObjcExecutor.h" +#ifdef WITH_FBSYSTRACE +#import +#endif + #define RCTAssertJSThread() \ RCTAssert(self.executorClass || self->_jsThread == [NSThread currentThread], \ @"This method must be called on JS thread") @@ -578,16 +579,15 @@ static NSError *tryAndReturnError(dispatch_block_t block) { for (RCTModuleData *moduleData in _moduleDataByID) { // TODO mhorowitz #10487027: unwrap C++ modules and register them directly. if ([moduleData.moduleClass isSubclassOfClass:[RCTCxxModule class]]) { - RCTCxxModule *cxxInstance = moduleData.instance; // If a module does not support automatic instantiation, and // wasn't provided as an extra module, it may not have an // instance. If so, skip it. - if (!cxxInstance) { + if (![moduleData hasInstance]) { continue; } modules.emplace_back( new QueueNativeModule(self, std::make_unique( - _reactInstance, [cxxInstance move]))); + _reactInstance, [(RCTCxxModule *)(moduleData.instance) move]))); } else { modules.emplace_back(new RCTNativeModule(self, moduleData)); }