Run RCTAccessibilityManager methods on the main queue (#58476)
Summary: Pull Request resolved: https://github.com/react/react-native/pull/58476 RCTAccessibilityManager mirrors UIKit accessibility state into ivars from nine NSNotificationCenter handlers, which are delivered on the main thread. The module declared no methodQueue, so its exported methods ran on the JS thread instead, and none of its properties are atomic. That leaves the content size multipliers open to a data race. The `multipliers` getter lazily assigns `_multipliers` on read and is reached from the main thread via the content size category notification, while `setAccessibilityContentSizeMultipliers:` reaches `setMultipliers:` from the JS thread and releases the previous dictionary. Concurrent access can over-release that dictionary and leave a dangling pointer behind, which then faults on the next message to it. Declare methodQueue as the main queue so the exported methods and the notification handlers serialize on one thread. The module already requires main queue setup and every method reads UIKit-derived state, so this matches how it is used. Changelog: [iOS][Fixed] - Fix data race on accessibility content size multipliers in `RCTAccessibilityManager` Reviewed By: javache Differential Revision: D119565016 fbshipit-source-id: 53cee1f9f5984519964e0e8fa8df12f1e7fa88f7
C
Christoph Purrer committed
ea2ca1b9211176bc482e33eef0118f1aefce2593
Parent: be53e3a
Committed by meta-codesync[bot] <215208954+meta-codesync[bot]@users.noreply.github.com>
on 9/11/2026, 3:06:20 PM