forked from qt-creator/qt-creator
Fix a possible crash in FindReferences on shutdown
Cancel and wait for all threads started by FindReferences in its destructor. Task-number: QTCREATORBUG-25711 Change-Id: I83c3ea832a173a7fff5c52e0c0136dfff2234afe Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -815,6 +815,7 @@ FindReferences::FindReferences(QObject *parent)
|
||||
m_watcher.setPendingResultsLimit(1);
|
||||
connect(&m_watcher, &QFutureWatcherBase::resultsReadyAt, this, &FindReferences::displayResults);
|
||||
connect(&m_watcher, &QFutureWatcherBase::finished, this, &FindReferences::searchFinished);
|
||||
m_synchronizer.setCancelOnWait(true);
|
||||
}
|
||||
|
||||
FindReferences::~FindReferences() = default;
|
||||
@@ -922,6 +923,7 @@ void FindReferences::findUsages(const QString &fileName, quint32 offset)
|
||||
QFuture<Usage> result = Utils::runAsync(&find_helper, ModelManagerInterface::workingCopy(),
|
||||
modelManager->snapshot(), fileName, offset, QString());
|
||||
m_watcher.setFuture(result);
|
||||
m_synchronizer.addFuture(result);
|
||||
}
|
||||
|
||||
void FindReferences::renameUsages(const QString &fileName, quint32 offset,
|
||||
@@ -937,6 +939,7 @@ void FindReferences::renameUsages(const QString &fileName, quint32 offset,
|
||||
QFuture<Usage> result = Utils::runAsync(&find_helper, ModelManagerInterface::workingCopy(),
|
||||
modelManager->snapshot(), fileName, offset, newName);
|
||||
m_watcher.setFuture(result);
|
||||
m_synchronizer.addFuture(result);
|
||||
}
|
||||
|
||||
QList<FindReferences::Usage> FindReferences::findUsageOfType(const QString &fileName, const QString &typeName)
|
||||
|
@@ -27,6 +27,8 @@
|
||||
|
||||
#include "qmljseditor_global.h"
|
||||
|
||||
#include <utils/futuresynchronizer.h>
|
||||
|
||||
#include <QObject>
|
||||
#include <QFutureWatcher>
|
||||
#include <QPointer>
|
||||
@@ -81,6 +83,7 @@ private:
|
||||
|
||||
QPointer<Core::SearchResult> m_currentSearch;
|
||||
QFutureWatcher<Usage> m_watcher;
|
||||
Utils::FutureSynchronizer m_synchronizer;
|
||||
};
|
||||
|
||||
} // namespace QmlJSEditor
|
||||
|
Reference in New Issue
Block a user