AutoTest: Fix potential crash

It is a bad idea to remove child items while iterating over them.
Introduced a while ago, but forgotten to fix in f00a113e.

Change-Id: I8d335cec34c2e6a9e7dff99d10c68066ffa8933d
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2017-03-06 15:02:35 +01:00
parent 270f863254
commit 50683f5882
2 changed files with 14 additions and 12 deletions

View File

@@ -67,14 +67,7 @@ TestTreeModel *TestTreeModel::instance()
TestTreeModel::~TestTreeModel()
{
const Utils::TreeItem *invisibleRoot = rootItem();
const int frameworkRootCount = invisibleRoot ? invisibleRoot->childCount() : 0;
for (int row = frameworkRootCount - 1; row >= 0; --row) {
Utils::TreeItem *item = invisibleRoot->childAt(row);
item->removeChildren();
takeItem(item); // do NOT delete the item as it's still a ptr hold by TestFrameworkManager
}
removeTestRootNodes();
s_instance = nullptr;
}
@@ -170,10 +163,7 @@ QList<TestConfiguration *> TestTreeModel::getSelectedTests() const
void TestTreeModel::syncTestFrameworks()
{
// remove all currently registered
for (Utils::TreeItem *item : *rootItem()) {
item->removeChildren();
takeItem(item); // do NOT delete the item as it's still a ptr hold by TestFrameworkManager
}
removeTestRootNodes();
TestFrameworkManager *frameworkManager = TestFrameworkManager::instance();
QVector<Core::Id> sortedIds = frameworkManager->sortedActiveFrameworkIds();
@@ -285,6 +275,17 @@ void TestTreeModel::removeAllTestItems()
emit testTreeModelChanged();
}
void TestTreeModel::removeTestRootNodes()
{
const Utils::TreeItem *invisibleRoot = rootItem();
const int frameworkRootCount = invisibleRoot ? invisibleRoot->childCount() : 0;
for (int row = frameworkRootCount - 1; row >= 0; --row) {
Utils::TreeItem *item = invisibleRoot->childAt(row);
item->removeChildren();
takeItem(item); // do NOT delete the item as it's still a ptr held by TestFrameworkManager
}
}
#ifdef WITH_TESTS
// we're inside tests - so use some internal knowledge to make testing easier
TestTreeItem *qtRootNode()

View File

@@ -83,6 +83,7 @@ private:
void onParseResultReady(const TestParseResultPtr result);
void handleParseResult(const TestParseResult *result, TestTreeItem *rootNode);
void removeAllTestItems();
void removeTestRootNodes();
void removeFiles(const QStringList &files);
bool sweepChildren(TestTreeItem *item);