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
This commit is contained in:
Samuel Susla
2023-04-27 04:23:57 -07:00
committed by Facebook GitHub Bot
parent ec1ab73674
commit 6c385c6433
@@ -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);
}