Skip to content

Commit

Permalink
fix(ios): fix a crash caused by thread race
Browse files Browse the repository at this point in the history
  • Loading branch information
ozonelmy authored and zoomchan-cxj committed Jun 21, 2022
1 parent 5291ab6 commit b63148e
Showing 1 changed file with 33 additions and 33 deletions.
66 changes: 33 additions & 33 deletions ios/sdk/base/HippyBatchedBridge.mm
Expand Up @@ -1113,44 +1113,44 @@ - (id)callNativeModule:(NSUInteger)moduleID method:(NSUInteger)methodID params:(
// if (!_valid) {
// return nil;
// }
std::unique_lock<std::mutex> lock(_moduleDataMutex);
NSArray<HippyModuleData *> *moduleDataByID = [_moduleDataByID copy];
if (moduleID >= [moduleDataByID count]) {
if (_valid) {
HippyLogError(@"moduleID %lu exceed range of moduleDataByID %lu, bridge is valid %ld", moduleID, [moduleDataByID count], (long)_valid);
}
return nil;
}
HippyModuleData *moduleData = moduleDataByID[moduleID];
if (HIPPY_DEBUG && !moduleData) {
if (_valid) {
HippyLogError(@"No module found for id '%lu'", (unsigned long)moduleID);
id<HippyBridgeMethod> method = nil;
HippyModuleData *moduleData = nil;
{
std::lock_guard<std::mutex> lock(_moduleDataMutex);
NSArray<HippyModuleData *> *moduleDataByID = [_moduleDataByID copy];
if (moduleID >= [moduleDataByID count]) {
if (_valid) {
HippyLogError(@"moduleID %lu exceed range of moduleDataByID %lu, bridge is valid %ld", moduleID, [moduleDataByID count], (long)_valid);
}
return nil;
}
return nil;
}
// not for UI Actions if NO==_valid
if (!_valid) {
if ([[moduleData name] isEqualToString:@"UIManager"]) {
moduleData = moduleDataByID[moduleID];
if (HIPPY_DEBUG && !moduleData) {
if (_valid) {
HippyLogError(@"No module found for id '%lu'", (unsigned long)moduleID);
}
return nil;
}
}
NSArray<id<HippyBridgeMethod>> *methods = [moduleData.methods copy];
if (methodID >= [methods count]) {
if (_valid) {
HippyLogError(@"methodID %lu exceed range of moduleData.methods %lu, bridge is valid %ld", moduleID, [methods count], (long)_valid);
// not for UI Actions if NO==_valid
if (!_valid) {
if ([[moduleData name] isEqualToString:@"UIManager"]) {
return nil;
}
}
return nil;
}
id<HippyBridgeMethod> method = methods[methodID];
if (HIPPY_DEBUG && !method) {
if (_valid) {
HippyLogError(@"Unknown methodID: %lu for module: %lu (%@)", (unsigned long)methodID, (unsigned long)moduleID, moduleData.name);
NSArray<id<HippyBridgeMethod>> *methods = [moduleData.methods copy];
if (methodID >= [methods count]) {
if (_valid) {
HippyLogError(@"methodID %lu exceed range of moduleData.methods %lu, bridge is valid %ld", moduleID, [methods count], (long)_valid);
}
return nil;
}
method = methods[methodID];
if (HIPPY_DEBUG && !method) {
if (_valid) {
HippyLogError(@"Unknown methodID: %lu for module: %lu (%@)", (unsigned long)methodID, (unsigned long)moduleID, moduleData.name);
}
return nil;
}
return nil;
}

if (lock.owns_lock()) {
lock.unlock();
}
@try {
BOOL shouldInvoked = YES;
Expand Down

0 comments on commit b63148e

Please sign in to comment.