Skip to content

Commit 5bf00b7

Browse files
philIipfacebook-github-bot
authored andcommitted
put PR#41194 behind gating (facebook#41469)
Summary: Changelog: [Internal] PR#41194 (facebook#41194) introduces a new callsite to `RCTUnsafeExecuteOnMainQueueSync` in the module init path, which increases risk for deadlock. let's gate it Differential Revision: D51274859
1 parent ad0f064 commit 5bf00b7

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

packages/react-native/React/Base/RCTBridge.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ void RCTEnableTurboModuleSyncVoidMethods(BOOL enabled);
6161
BOOL RCTTurboModuleSharedQueueEnabled(void);
6262
void RCTEnableTurboModuleSharedQueue(BOOL enabled);
6363

64+
BOOL RCTUIManagerDispatchAccessibilityManagerInitOntoMain(void);
65+
void RCTUIManagerSetDispatchAccessibilityManagerInitOntoMain(BOOL enabled);
66+
6467
typedef enum {
6568
kRCTBridgeProxyLoggingLevelNone,
6669
kRCTBridgeProxyLoggingLevelWarning,

packages/react-native/React/Base/RCTBridge.mm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,17 @@ void RCTEnableTurboModuleSharedQueue(BOOL enabled)
162162
gTurboModuleEnableSharedQueue = enabled;
163163
}
164164

165+
BOOL kDispatchAccessibilityManagerInitOntoMain = NO;
166+
BOOL RCTUIManagerDispatchAccessibilityManagerInitOntoMain(void)
167+
{
168+
return kDispatchAccessibilityManagerInitOntoMain;
169+
}
170+
171+
void RCTUIManagerSetDispatchAccessibilityManagerInitOntoMain(BOOL enabled)
172+
{
173+
kDispatchAccessibilityManagerInitOntoMain = enabled;
174+
}
175+
165176
@interface RCTBridge () <RCTReloadListener>
166177
@end
167178

packages/react-native/React/Modules/RCTUIManager.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,10 @@ - (void)setBridge:(RCTBridge *)bridge
181181
}
182182

183183
// This dispatch_async avoids a deadlock while configuring native modules
184-
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
184+
dispatch_queue_t accessibilityManagerInitQueue = RCTUIManagerDispatchAccessibilityManagerInitOntoMain()
185+
? dispatch_get_main_queue()
186+
: dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0);
187+
dispatch_async(accessibilityManagerInitQueue, ^{
185188
[[NSNotificationCenter defaultCenter] addObserver:self
186189
selector:@selector(didReceiveNewContentSizeMultiplier)
187190
name:@"RCTAccessibilityManagerDidUpdateMultiplierNotification"

0 commit comments

Comments
 (0)