From dc38988bcc160e387fe1d821f80eb42de47d11c5 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Wed, 7 Feb 2024 08:26:18 -0800 Subject: [PATCH] Fix warning when loading RCTUIManager and A11yManager (#42733) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/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 --- packages/react-native/React/Modules/RCTUIManager.m | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/react-native/React/Modules/RCTUIManager.m b/packages/react-native/React/Modules/RCTUIManager.m index fca5ee7aa90072..1d85520d0a4a78 100644 --- a/packages/react-native/React/Modules/RCTUIManager.m +++ b/packages/react-native/React/Modules/RCTUIManager.m @@ -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 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() @@ -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)