From 6c385c64334c1499a025b61c9b5dc2d2c093c040 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Thu, 27 Apr 2023 04:23:57 -0700 Subject: [PATCH] Fix race condition in SurfaceHandler (#37088) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/37088 changelog: [internal] This is a race condition. parameters need to be copied out, otherwise they might be changed during read. Reviewed By: luluwu2032 Differential Revision: D45272086 fbshipit-source-id: 9043762dfaaf61d08e187c0d83f743e991a94ed1 --- .../react/renderer/scheduler/SurfaceHandler.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp b/packages/react-native/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp index da00fd874bf..19f5e4476d9 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp @@ -112,6 +112,7 @@ void SurfaceHandler::stop() const noexcept { } void SurfaceHandler::setDisplayMode(DisplayMode displayMode) const noexcept { + auto parameters = Parameters{}; { std::unique_lock lock(parametersMutex_); if (parameters_.displayMode == displayMode) { @@ -119,6 +120,7 @@ void SurfaceHandler::setDisplayMode(DisplayMode displayMode) const noexcept { } parameters_.displayMode = displayMode; + parameters = parameters_; } { @@ -129,10 +131,10 @@ void SurfaceHandler::setDisplayMode(DisplayMode displayMode) const noexcept { } link_.uiManager->setSurfaceProps( - parameters_.surfaceId, - parameters_.moduleName, - parameters_.props, - parameters_.displayMode); + parameters.surfaceId, + parameters.moduleName, + parameters.props, + parameters.displayMode); applyDisplayMode(displayMode); }