diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index e5495f16cc4..6d022141eaf 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -128,6 +128,11 @@ CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName) CMakeProject::~CMakeProject() { + if (!m_treeScanner.isFinished()) { + auto future = m_treeScanner.future(); + future.cancel(); + future.waitForFinished(); + } setRootProjectNode(nullptr); m_codeModelFuture.cancel(); qDeleteAll(m_extraCompilers); diff --git a/src/plugins/cmakeprojectmanager/treescanner.cpp b/src/plugins/cmakeprojectmanager/treescanner.cpp index b8a865c8e98..aaee7fa9210 100644 --- a/src/plugins/cmakeprojectmanager/treescanner.cpp +++ b/src/plugins/cmakeprojectmanager/treescanner.cpp @@ -50,6 +50,14 @@ TreeScanner::TreeScanner(QObject *parent) : QObject(parent) connect(&m_futureWatcher, &FutureWatcher::finished, this, &TreeScanner::finished); } +TreeScanner::~TreeScanner() +{ + if (!m_futureWatcher.isFinished()) { + m_futureWatcher.cancel(); + m_futureWatcher.waitForFinished(); + } +} + bool TreeScanner::asyncScanForFiles(const Utils::FileName &directory) { if (!m_futureWatcher.isFinished()) diff --git a/src/plugins/cmakeprojectmanager/treescanner.h b/src/plugins/cmakeprojectmanager/treescanner.h index 60833969afe..33b4522a204 100644 --- a/src/plugins/cmakeprojectmanager/treescanner.h +++ b/src/plugins/cmakeprojectmanager/treescanner.h @@ -53,6 +53,7 @@ public: using FileTypeFactory = std::function; explicit TreeScanner(QObject *parent = nullptr); + ~TreeScanner(); // Start scanning in given directory bool asyncScanForFiles(const Utils::FileName& directory);