mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-28 21:48:13 +08:00
fix(ios): fix thread competition bugs
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user