From 492f13578e7d42c5f2fbb56f7a46b7fe1e6f2182 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 11 May 2021 09:26:15 +0200 Subject: [PATCH] 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 --- src/plugins/qmljseditor/qmljsfindreferences.cpp | 3 +++ src/plugins/qmljseditor/qmljsfindreferences.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index a251e823062..06afc62d8a5 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -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 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 result = Utils::runAsync(&find_helper, ModelManagerInterface::workingCopy(), modelManager->snapshot(), fileName, offset, newName); m_watcher.setFuture(result); + m_synchronizer.addFuture(result); } QList FindReferences::findUsageOfType(const QString &fileName, const QString &typeName) diff --git a/src/plugins/qmljseditor/qmljsfindreferences.h b/src/plugins/qmljseditor/qmljsfindreferences.h index ebfdad5a233..30c120503df 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.h +++ b/src/plugins/qmljseditor/qmljsfindreferences.h @@ -27,6 +27,8 @@ #include "qmljseditor_global.h" +#include + #include #include #include @@ -81,6 +83,7 @@ private: QPointer m_currentSearch; QFutureWatcher m_watcher; + Utils::FutureSynchronizer m_synchronizer; }; } // namespace QmlJSEditor