From f1925c2668ceb96812a6a82db8cda9da787306f4 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Tue, 14 Nov 2023 04:59:33 -0800 Subject: [PATCH] fix use out-of-scope memory warning (#41441) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41441 changelog: [internal] Reviewed By: cipolleschi Differential Revision: D51233760 fbshipit-source-id: 5fc7ab22220e3d80729243e715e22e85e3ba7afa --- .../react/renderer/core/ConcreteComponentDescriptor.h | 5 +---- .../ReactCommon/react/renderer/core/ShadowNodeFamily.h | 5 +---- .../ReactCommon/react/renderer/mounting/ShadowTree.cpp | 4 ++-- .../ReactCommon/react/renderer/uimanager/UIManager.cpp | 5 ++--- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h b/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h index 6f8836cab45..4fc25fe73c7 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h @@ -156,10 +156,7 @@ class ConcreteComponentDescriptor : public ComponentDescriptor { ShadowNodeFamily::Shared createFamily( const ShadowNodeFamilyFragment& fragment) const override { return std::make_shared( - ShadowNodeFamilyFragment{ - fragment.tag, fragment.surfaceId, fragment.instanceHandle}, - eventDispatcher_, - *this); + fragment, eventDispatcher_, *this); } SharedEventEmitter createEventEmitter( diff --git a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h index ff7e1e67bab..1fefb9532ea 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ShadowNodeFamily.h @@ -28,14 +28,11 @@ class State; * about a `ShadowNodeFamily`. Pelase define specific purpose containers in * those cases. * - * Note: All of the fields are `const &` references (essentially just raw - * pointers) which means that the Fragment does not copy/store them nor - * retain ownership of them. */ struct ShadowNodeFamilyFragment { const Tag tag; const SurfaceId surfaceId; - const InstanceHandle::Shared& instanceHandle; + const std::shared_ptr instanceHandle; }; /* diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index d802f24b3a9..1b98aac8ce0 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -291,8 +291,8 @@ ShadowTree::ShadowTree( layoutConstraints, layoutContext); - const auto fragment = ShadowNodeFamilyFragment{surfaceId, surfaceId, nullptr}; - auto family = globalRootComponentDescriptor->createFamily(fragment); + auto family = globalRootComponentDescriptor->createFamily( + {surfaceId, surfaceId, nullptr}); auto rootShadowNode = std::static_pointer_cast( globalRootComponentDescriptor->createShadowNode( diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index e16fff45294..d9b53b655a9 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -76,9 +76,8 @@ std::shared_ptr UIManager::createNode( PropsParserContext propsParserContext{surfaceId, *contextContainer_.get()}; - const auto fragment = - ShadowNodeFamilyFragment{tag, surfaceId, instanceHandle}; - auto family = componentDescriptor.createFamily(fragment); + auto family = + componentDescriptor.createFamily({tag, surfaceId, instanceHandle}); const auto props = componentDescriptor.cloneProps(propsParserContext, nullptr, rawProps); const auto state = componentDescriptor.createInitialState(props, family);