From 2c04c644d0b17c5f751f8dc6f0712b452064685c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 2 Nov 2022 09:33:10 +0100 Subject: [PATCH] TreeScanner: Pass a copy of filter and factory into async call Otherwise, m_filter and m_factory may be used from 2 threads at the same time, what is not thread safe (setFilter() / setTypeFactory() from caller thread, and copy of m_filter and m_factory inside async call body). Change-Id: Ic322870f9c27de10c5c51082cfbb85c729326993 Reviewed-by: Reviewed-by: Eike Ziller --- src/plugins/projectexplorer/treescanner.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/treescanner.cpp b/src/plugins/projectexplorer/treescanner.cpp index 6e7e25fe9b0..747a4d1ddcf 100644 --- a/src/plugins/projectexplorer/treescanner.cpp +++ b/src/plugins/projectexplorer/treescanner.cpp @@ -45,8 +45,9 @@ bool TreeScanner::asyncScanForFiles(const Utils::FilePath &directory) if (!m_futureWatcher.isFinished()) return false; - m_scanFuture = Utils::runAsync([this, directory](FutureInterface &fi) { - TreeScanner::scanForFiles(fi, directory, m_filter, m_factory); + m_scanFuture = Utils::runAsync( + [directory, filter = m_filter, factory = m_factory] (FutureInterface &fi) { + TreeScanner::scanForFiles(fi, directory, filter, factory); }); m_futureWatcher.setFuture(m_scanFuture);