From dfdeb4d630e9678ee2449c73a35a44d9580d10bd Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 5 Dec 2022 10:25:59 +0100 Subject: [PATCH] TaskTree: Ensure the same storage isn't added twice Change-Id: I780d61091fea39a4542b4f743593b5062a784ba5 Reviewed-by: hjk Reviewed-by: --- src/libs/utils/tasktree.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/tasktree.cpp b/src/libs/utils/tasktree.cpp index 512d939211c..f1a4146c9da 100644 --- a/src/libs/utils/tasktree.cpp +++ b/src/libs/utils/tasktree.cpp @@ -268,11 +268,22 @@ public: GuardLocker locker(m_guard); emit q->errorOccurred(); } + QList addStorages(const QList &storages) { + QList addedStorages; + for (const TreeStorageBase &storage : storages) { + QTC_ASSERT(!m_storages.contains(storage), qWarning("Can't add the same storage into " + "one TaskTree twice, skipping..."); continue); + addedStorages << storage; + m_storages << storage; + } + return addedStorages; + } TaskTree *q = nullptr; std::unique_ptr m_root = nullptr; Guard m_guard; int m_progressValue = 0; + QSet m_storages; }; TaskContainer::TaskContainer(TaskTreePrivate *taskTreePrivate, TaskContainer *parentContainer, @@ -282,7 +293,7 @@ TaskContainer::TaskContainer(TaskTreePrivate *taskTreePrivate, TaskContainer *pa , m_executeMode(task.executeMode()) , m_workflowPolicy(task.workflowPolicy()) , m_groupHandler(task.groupHandler()) - , m_storageList(task.storageList()) + , m_storageList(taskTreePrivate->addStorages(task.storageList())) { const QList &children = task.children(); for (const TaskItem &child : children) {