diff --git a/change/react-native-windows-2020-08-28-15-47-39-dropview62.json b/change/react-native-windows-2020-08-28-15-47-39-dropview62.json new file mode 100644 index 00000000000..05220b78799 --- /dev/null +++ b/change/react-native-windows-2020-08-28-15-47-39-dropview62.json @@ -0,0 +1,8 @@ +{ + "type": "patch", + "comment": "Drop remaining ShadowNodes in UIManager dtor", + "packageName": "react-native-windows", + "email": "email not defined", + "dependentChangeType": "patch", + "date": "2020-08-28T22:47:39.486Z" +} diff --git a/vnext/ReactWindowsCore/Modules/UIManagerModule.cpp b/vnext/ReactWindowsCore/Modules/UIManagerModule.cpp index 7d72ac8d25a..22dc6c771fd 100644 --- a/vnext/ReactWindowsCore/Modules/UIManagerModule.cpp +++ b/vnext/ReactWindowsCore/Modules/UIManagerModule.cpp @@ -28,7 +28,9 @@ UIManager::UIManager(std::vector> &&viewManagers, UIManager::~UIManager() { m_nodeRegistry.removeAllRootViews([this](int64_t rootViewTag) { removeRootView(rootViewTag); }); - + m_nodeRegistry.ForAllNodes([this](int64_t tag, shadow_ptr const &shadowNode) noexcept { + DropView(tag, false, true); + }); m_nativeUIManager->setHost(nullptr); m_nativeUIManager->destroy(); } diff --git a/vnext/ReactWindowsCore/ShadowNodeRegistry.cpp b/vnext/ReactWindowsCore/ShadowNodeRegistry.cpp index 3a69b05b83c..f51d7675238 100644 --- a/vnext/ReactWindowsCore/ShadowNodeRegistry.cpp +++ b/vnext/ReactWindowsCore/ShadowNodeRegistry.cpp @@ -68,5 +68,11 @@ ShadowNode *ShadowNodeRegistry::getParentRootShadowNode(int64_t nodeTag) { return nullptr; } +void ShadowNodeRegistry::ForAllNodes(const Mso::FunctorRef &fnDo) noexcept { + for (auto &kvp : m_allNodes) { + fnDo(kvp.first, kvp.second); + } +} + } // namespace react } // namespace facebook diff --git a/vnext/ReactWindowsCore/ShadowNodeRegistry.h b/vnext/ReactWindowsCore/ShadowNodeRegistry.h index e4d4220a3a6..0f11698cb47 100644 --- a/vnext/ReactWindowsCore/ShadowNodeRegistry.h +++ b/vnext/ReactWindowsCore/ShadowNodeRegistry.h @@ -3,6 +3,7 @@ #pragma once #include +#include #include namespace facebook { @@ -32,6 +33,8 @@ struct ShadowNodeRegistry { ShadowNode *getParentRootShadowNode(int64_t nodeTag); + void ForAllNodes(const Mso::FunctorRef &fnDo) noexcept; + private: std::unordered_set m_roots; std::map> m_allNodes;