fix(ios): fix thread competition bugs

This commit is contained in:
mengyanluo
2020-11-25 15:50:01 +08:00
committed by luomy
parent 6b31bc2121
commit a60cf1c199
2 changed files with 7 additions and 3 deletions
+6 -3
View File
@@ -138,7 +138,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id<HippyBridgeDelegate>)
{
self.semaphore = dispatch_semaphore_create(0);
self.moduleSemaphore = dispatch_semaphore_create(1);
[[NSNotificationCenter defaultCenter]
postNotificationName:HippyJavaScriptWillStartLoadingNotification
object:_parentBridge userInfo:@{@"bridge": self}];
@@ -304,6 +304,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id<HippyBridgeDelegate>)
- (void)initModulesWithDispatchGroup:(__unused dispatch_group_t)dispatchGroup
{
//HIPPY_PROFILE_BEGIN_EVENT(0, @"-[HippyBatchedBridge initModules]", nil);
dispatch_semaphore_wait(self.moduleSemaphore, DISPATCH_TIME_FOREVER);
[_performanceLogger markStartForTag:HippyPLNativeModuleInit];
NSArray<id<HippyBridgeModule>> *extraModules = nil;
@@ -408,7 +409,8 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id<HippyBridgeDelegate>)
_moduleDataByName = [moduleDataByName copy];
_moduleClassesByID = [moduleClassesByID copy];
//HIPPY_PROFILE_END_EVENT(HippyProfileTagAlways, @"");
dispatch_semaphore_signal(self.moduleSemaphore);
// Synchronously set up the pre-initialized modules
//HIPPY_PROFILE_BEGIN_EVENT(0, @"extraModules", nil);
for (HippyModuleData *moduleData in _moduleDataByID) {
@@ -512,6 +514,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id<HippyBridgeDelegate>)
- (NSString *)moduleConfig
{
NSMutableArray<NSArray *> *config = [NSMutableArray new];
dispatch_semaphore_wait(self.moduleSemaphore, DISPATCH_TIME_FOREVER);
for (HippyModuleData *moduleData in _moduleDataByID) {
if (self.executorClass == [HippyJSCExecutor class]) {
[config addObject:@[moduleData.name]];
@@ -519,7 +522,7 @@ HIPPY_NOT_IMPLEMENTED(- (instancetype)initWithDelegate:(id<HippyBridgeDelegate>)
[config addObject:HippyNullIfNil(moduleData.config)];
}
}
dispatch_semaphore_signal(self.moduleSemaphore);
return HippyJSONStringify(@{
@"remoteModuleConfig": config,
}, NULL);
+1
View File
@@ -152,6 +152,7 @@ HIPPY_EXTERN void HippyVerifyAllModulesExported(NSArray *extraModules);
@property (nonatomic, assign, readonly) BOOL moduleSetupComplete;
@property (nonatomic, strong) dispatch_semaphore_t semaphore;
@property (nonatomic, strong) dispatch_semaphore_t moduleSemaphore;
- (instancetype)initWithParentBridge:(HippyBridge *)bridge NS_DESIGNATED_INITIALIZER;
- (void)start;