Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

Commit

Permalink
[iOS] support jsTaskQueue thread safe
Browse files Browse the repository at this point in the history
  • Loading branch information
jianhan-he committed Aug 7, 2019
1 parent b333c98 commit bc252dc
Showing 1 changed file with 23 additions and 13 deletions.
36 changes: 23 additions & 13 deletions ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
Expand Up @@ -151,7 +151,7 @@ + (void)_performBlockOnBridgeThread:(void (^)(void))block
if ([NSThread currentThread] == [self jsThread]) {
block();
} else {
[self performSelector:@selector(_performBlockOnBridgeThread:instance:)
[self performSelector:@selector(_performBlockOnBridgeThread:)
onThread:[self jsThread]
withObject:[block copy]
waitUntilDone:NO];
Expand Down Expand Up @@ -205,12 +205,18 @@ + (void)_performBlockOnBackupBridgeThread:(void (^)(void))block putInTaskQueue:(
return;
}
if (putInTaskQueue) {
[[WXSDKManager bridgeMgr].jsTaskQueue addObject:block];
[WXBridgeManager _performBlockOnBackupBridgeThread:^{
[[WXSDKManager bridgeMgr].jsTaskQueue addObject:block];
} putInTaskQueue:NO];
} else {
[self performSelector:@selector(_performBlockOnBridgeThread:instance:)
onThread:[self backupJsThread]
withObject:[block copy]
waitUntilDone:NO];
if ([NSThread currentThread] == [self backupJsThread]) {
block();
} else {
[self performSelector:@selector(_performBlockOnBridgeThread:instance:)
onThread:[self backupJsThread]
withObject:[block copy]
waitUntilDone:NO];
}
}
}

Expand Down Expand Up @@ -350,13 +356,17 @@ - (void)createInstance:(NSString *)instance
}

- (void)executeJSTaskQueue {
if (_jsTaskQueue.count == 0 || !_supportMultiJSThread) {
return;
}
for (id block in _jsTaskQueue) {
[WXBridgeManager _performBlockOnBackupBridgeThread:block putInTaskQueue:NO];
}
[_jsTaskQueue removeAllObjects];
__weak typeof(self) weakSelf = self;
[WXBridgeManager _performBlockOnBackupBridgeThread:^{
if (weakSelf.jsTaskQueue.count == 0 || !weakSelf.supportMultiJSThread) {
return;
}
for (id task in weakSelf.jsTaskQueue) {
void (^block)(void) = task;
block();
}
[weakSelf.jsTaskQueue removeAllObjects];
} putInTaskQueue:NO];
}

- (WXThreadSafeMutableArray *)instanceIdStack
Expand Down

0 comments on commit bc252dc

Please sign in to comment.