Fabric: Source shadow node is now stored as a weak pointer
Summary: We use shource nodes only in the diffing alogorithm. It implies that we have strong pointers to those nodes in trees we compare against. Using weak_ptr's allows to avoid memory leaks. Reviewed By: mdvacca Differential Revision: D7376348 fbshipit-source-id: 34e5f58f18a00475f6bcdfbea3996b41c84dff62
This commit is contained in:
parent
ca20fcd47d
commit
53782eafc9
|
@ -68,7 +68,7 @@ InstanceHandle ShadowNode::getInstanceHandle() const {
|
|||
}
|
||||
|
||||
SharedShadowNode ShadowNode::getSourceNode() const {
|
||||
return sourceNode_;
|
||||
return sourceNode_.lock();
|
||||
}
|
||||
|
||||
void ShadowNode::sealRecursive() const {
|
||||
|
@ -111,7 +111,7 @@ void ShadowNode::replaceChild(const SharedShadowNode &oldChild, const SharedShad
|
|||
|
||||
void ShadowNode::clearSourceNode() {
|
||||
ensureUnsealed();
|
||||
sourceNode_ = nullptr;
|
||||
sourceNode_.reset();
|
||||
}
|
||||
|
||||
#pragma mark - DebugStringConvertible
|
||||
|
@ -146,10 +146,11 @@ SharedDebugStringConvertibleList ShadowNode::getDebugProps() const {
|
|||
list.push_back(std::make_shared<DebugStringConvertibleItem>("handle", std::to_string((size_t)instanceHandle_)));
|
||||
}
|
||||
|
||||
if (sourceNode_) {
|
||||
SharedShadowNode sourceNode = getSourceNode();
|
||||
if (sourceNode) {
|
||||
list.push_back(std::make_shared<DebugStringConvertibleItem>(
|
||||
"source",
|
||||
sourceNode_->getDebugDescription({.maximumDepth = 1, .format = false})
|
||||
sourceNode->getDebugDescription({.maximumDepth = 1, .format = false})
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ using SharedShadowNode = std::shared_ptr<const ShadowNode>;
|
|||
using SharedShadowNodeList = std::vector<std::shared_ptr<const ShadowNode>>;
|
||||
using SharedShadowNodeSharedList = std::shared_ptr<const SharedShadowNodeList>;
|
||||
using SharedShadowNodeUnsharedList = std::shared_ptr<SharedShadowNodeList>;
|
||||
using WeakShadowNode = std::weak_ptr<const ShadowNode>;
|
||||
|
||||
class ShadowNode:
|
||||
public virtual Sealable,
|
||||
|
@ -79,7 +80,7 @@ protected:
|
|||
InstanceHandle instanceHandle_;
|
||||
SharedProps props_;
|
||||
SharedShadowNodeSharedList children_;
|
||||
SharedShadowNode sourceNode_;
|
||||
WeakShadowNode sourceNode_;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
|
|
Loading…
Reference in New Issue