From ce12c239fff88f0605b0e0a394ea4aaae424db66 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 27 Jun 2018 14:57:14 +0200 Subject: [PATCH] ProjectExplorer: Fix replaceSubtree for project nodes Ensure to keep node alive as long as needed. Task-number: QTCREATORBUG-20616 Change-Id: I57a720d3e31e14bcb8388de5fef68f70db370c90 Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/projectnodes.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 6284c33d058..b2fc067de8c 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -604,6 +604,7 @@ bool FolderNode::isAncesterOf(Node *n) bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr &&newNode) { + std::unique_ptr keepAlive; if (!oldNode) { addNode(std::move(newNode)); // Happens e.g. when a project is registered } else { @@ -614,9 +615,10 @@ bool FolderNode::replaceSubtree(Node *oldNode, std::unique_ptr &&newNode) QTC_ASSERT(it != m_nodes.end(), return false); if (newNode) { newNode->setParentFolderNode(this); + keepAlive = std::move(*it); *it = std::move(newNode); } else { - takeNode(oldNode); // Happens e.g. when project is shutting down + keepAlive = takeNode(oldNode); // Happens e.g. when project is shutting down } } handleSubTreeChanged(this);