Skip to content

Commit

Permalink
Fix A11yManager initialization warning and Race Condition
Browse files Browse the repository at this point in the history
  • Loading branch information
cipolleschi committed Jan 30, 2024
1 parent 53061d7 commit c76fa44
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions packages/react-native/React/Modules/RCTUIManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -179,15 +179,20 @@ - (void)setBridge:(RCTBridge *)bridge
_componentDataByName[componentData.name] = componentData;
}
}

// Preload the a11yManager as the RCTUIManager needs it to listen for notification
// By eagerly preloading it in the setBridge method, we make sure that the manager is
// properly initialized in the Main Thread and that we do not incur in any race condition
// or concurrency problem.
id<RCTBridgeModule> a11yManager = [self->_bridge moduleForName:@"AccessibilityManager"
lazilyLoadIfNecessary:YES];
__weak NSObject * a11yManagerWeakObject = a11yManager;
// This dispatch_async avoids a deadlock while configuring native modules
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
id a11yManager = [self->_bridge moduleForName:@"AccessibilityManager"
lazilyLoadIfNecessary:YES];
dispatch_async(dispatch_get_main_queue(), ^{
__strong NSObject * a11yManagerStrongObject = a11yManagerWeakObject;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didReceiveNewContentSizeMultiplier)
name:@"RCTAccessibilityManagerDidUpdateMultiplierNotification"
object:a11yManager];
object:a11yManagerStrongObject];
});
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(namedOrientationDidChange)
Expand Down

0 comments on commit c76fa44

Please sign in to comment.