Skip to content

Commit

Permalink
Fix crash in state reconciliation
Browse files Browse the repository at this point in the history
Summary:
Changelog: [internal]

Repro steps:

1. Go to fbsource/fbobjc.
2. Run following focus command P124860753.
3. Enable Address Sanitizer in Xcode.
3. Run the app from Xcode.
5. Make sure `react_fabric.enable_marketplace_home_ios` and `react_fabric.enabled_state_reconciliation_ios` Mobile Config flags are set to true.
6. Navigate to Marketplace Home and observe use of freed memory exception. You have to wait until second page of marketplace home feed is loaded.

{F228880980}

# Root cause

`ChangedShadowNodePairs` being a vector of pairs of references.
Those `shared_ptr` do not outlive the the run of `reconcileStateWithTree` (that's what I originally thought when I made them references).

This was introduced in D19814500.

Reviewed By: JoshuaGross

Differential Revision: D19977784

fbshipit-source-id: 8c4a381137baa08a6af9d3c1cb295fe6c2b2bf95
  • Loading branch information
sammy-SC authored and facebook-github-bot committed Feb 19, 2020
1 parent d4d8887 commit 60c1507
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions ReactCommon/fabric/mounting/TreeStateReconciliation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
namespace facebook {
namespace react {

using ChangedShadowNodePairs = std::vector<
std::pair<ShadowNode::Shared const &, ShadowNode::Unshared const &>>;
using ChangedShadowNodePairs =
std::vector<std::pair<ShadowNode::Shared, ShadowNode::Unshared>>;

/**
* Clones any children in the subtree that need to be cloned, and adds those to
Expand Down

0 comments on commit 60c1507

Please sign in to comment.