Skip to content

Commit

Permalink
Fix warning when loading RCTUIManager and A11yManager (#42733)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #42733

When we fixed the race condition between A11yManager and RCTUIManager, we did it by moving the A11yManager on a background queue.
In the old architecture, this was raising a warning which our users might find confusing. Plus, that change was not aligned with what the A11yManager declared in its configuration because we are actually initializing it starting from a BG queue.

{F1405693310}

With this change we anticipate the initialization of the module in a place where:
1. We know we are in the main queue
2. We know we are going to need it (so it is not violating the lazy load principle)
3. We know it is safe.

This should allow us to also remove the feature flag of `RCTUIManagerDispatchAccessibilityManagerInitOntoMain` because now it is safe to use the main_queue as requested by the module.

## Changelog:
[iOS][Fixed] - Initialize the A11yManager in the main queue and when we need it.

Reviewed By: philIip

Differential Revision: D53225120

fbshipit-source-id: fa6ef7fac380e17684cc02de0b4a46504b26bb3d
  • Loading branch information
cipolleschi authored and facebook-github-bot committed Feb 7, 2024
1 parent 635732a commit dc38988
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions packages/react-native/React/Modules/RCTUIManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,12 @@ - (void)setBridge:(RCTBridge *)bridge
}
}

// 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 = [bridge moduleForName:@"AccessibilityManager" lazilyLoadIfNecessary:YES];

// This dispatch_async avoids a deadlock while configuring native modules
dispatch_queue_t accessibilityManagerInitQueue = RCTUIManagerDispatchAccessibilityManagerInitOntoMain()
? dispatch_get_main_queue()
Expand All @@ -188,8 +194,7 @@ - (void)setBridge:(RCTBridge *)bridge
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didReceiveNewContentSizeMultiplier)
name:@"RCTAccessibilityManagerDidUpdateMultiplierNotification"
object:[self->_bridge moduleForName:@"AccessibilityManager"
lazilyLoadIfNecessary:YES]];
object:a11yManager];
});
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(namedOrientationDidChange)
Expand Down

0 comments on commit dc38988

Please sign in to comment.