-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix for nodes with display: contents
not being cleaned in some cases
#1729
Fix for nodes with display: contents
not being cleaned in some cases
#1729
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
@NickGerleman has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
Summary: Fixes a case where a node with `display: contents` would not be cleaned up in some cases. This was caused by it being called after some early returns handling different quick paths. This PR moves the call to `cleanupContentsNodesRecursively` earlier so that it's always called. Changelog: [General][Fixed] - Fix for nodes with `display: contents` not being cleaned in some cases X-link: facebook/yoga#1729 Differential Revision: D64910099 Pulled By: NickGerleman
What was the chain where we were mutating child before clone? |
The problem here wasn't mutating before cloning, but leaving a node marked as dirty after the layout has finished. The exact case in which I found this was a node with a single |
@NickGerleman merged this pull request in 8dc2fa5. |
Summary: X-link: facebook/react-native#47194 Fixes a case where a node with `display: contents` would not be cleaned up in some cases. This was caused by it being called after some early returns handling different quick paths. This PR moves the call to `cleanupContentsNodesRecursively` earlier so that it's always called. The problem here wasn't mutating before cloning, but leaving a node marked as dirty after the layout has finished. The exact case in which I found this was a node with a single `display: contents` child which needs to be a leaf. Then in the parent node [this](https://github.com/facebook/yoga/blob/b0b842d5e75d041e3af7e0ac55abfb8929fbbf21/yoga/algorithm/CalculateLayout.cpp#L1339) condition is true, so `cleanupContentsNodesRecursively` doesn't get called and the child node is never visited and cleaned. I assume the same will happen in the other paths with an early return here. Changelog: [General][Fixed] - Fix for nodes with `display: contents` not being cleaned in some cases X-link: facebook/yoga#1729 Reviewed By: rozele Differential Revision: D64910099 Pulled By: NickGerleman fbshipit-source-id: 6d56f8fbf687b7ee5af889c0b868406213c9cee8
#47194) Summary: Pull Request resolved: #47194 Fixes a case where a node with `display: contents` would not be cleaned up in some cases. This was caused by it being called after some early returns handling different quick paths. This PR moves the call to `cleanupContentsNodesRecursively` earlier so that it's always called. The problem here wasn't mutating before cloning, but leaving a node marked as dirty after the layout has finished. The exact case in which I found this was a node with a single `display: contents` child which needs to be a leaf. Then in the parent node [this](https://github.com/facebook/yoga/blob/b0b842d5e75d041e3af7e0ac55abfb8929fbbf21/yoga/algorithm/CalculateLayout.cpp#L1339) condition is true, so `cleanupContentsNodesRecursively` doesn't get called and the child node is never visited and cleaned. I assume the same will happen in the other paths with an early return here. Changelog: [General][Fixed] - Fix for nodes with `display: contents` not being cleaned in some cases X-link: facebook/yoga#1729 Reviewed By: rozele Differential Revision: D64910099 Pulled By: NickGerleman fbshipit-source-id: 6d56f8fbf687b7ee5af889c0b868406213c9cee8
Summary
Fixes a case where a node with
display: contents
would not be cleaned up in some cases. This was caused by it being called after some early returns handling different quick paths. This PR moves the call tocleanupContentsNodesRecursively
earlier so that it's always called.