forked from qt-creator/qt-creator
Debugger: Fix removing auto detected debuggers
Do not remove items while iterating over the tree or we may crash when removing more than one. Change-Id: I007672be94a7e6449cf25c965c07ca714049ae97 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -1053,19 +1053,23 @@ void DebuggerItemManager::removeDetectedDebuggers(const QString &detectionSource
|
|||||||
QString *logMessage)
|
QString *logMessage)
|
||||||
{
|
{
|
||||||
QStringList logMessages{tr("Removing debugger entries...")};
|
QStringList logMessages{tr("Removing debugger entries...")};
|
||||||
d->m_model->forItemsAtLevel<2>([detectionSource, &logMessages](DebuggerTreeItem *titem) {
|
QList<DebuggerTreeItem *> toBeRemoved;
|
||||||
|
|
||||||
|
d->m_model->forItemsAtLevel<2>([detectionSource, &toBeRemoved](DebuggerTreeItem *titem) {
|
||||||
if (titem->m_item.detectionSource() == detectionSource) {
|
if (titem->m_item.detectionSource() == detectionSource) {
|
||||||
logMessages.append(tr("Removed \"%1\"").arg(titem->m_item.displayName()));
|
toBeRemoved.append(titem);
|
||||||
d->m_model->destroyItem(titem);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// FIXME: These items appeared in early docker development. Ok to remove for Creator 7.0.
|
// FIXME: These items appeared in early docker development. Ok to remove for Creator 7.0.
|
||||||
FilePath filePath = titem->m_item.command();
|
FilePath filePath = titem->m_item.command();
|
||||||
if (filePath.scheme() + ':' + filePath.host() == detectionSource) {
|
if (filePath.scheme() + ':' + filePath.host() == detectionSource)
|
||||||
logMessages.append(tr("Removed \"%1\"").arg(titem->m_item.displayName()));
|
toBeRemoved.append(titem);
|
||||||
d->m_model->destroyItem(titem);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
for (DebuggerTreeItem *current : toBeRemoved) {
|
||||||
|
logMessages.append(tr("Removed \"%1\"").arg(current->m_item.displayName()));
|
||||||
|
d->m_model->destroyItem(current);
|
||||||
|
}
|
||||||
|
|
||||||
if (logMessage)
|
if (logMessage)
|
||||||
*logMessage = logMessages.join('\n');
|
*logMessage = logMessages.join('\n');
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user