diff options
author | Christian Kandeler <[email protected]> | 2021-09-15 16:32:11 +0200 |
---|---|---|
committer | Christian Kandeler <[email protected]> | 2021-09-16 07:23:25 +0000 |
commit | 32541fef3b01c5a2430a59ee110587fa19dd3689 (patch) | |
tree | 219027e529c42bf2b05daec213c2a3b60be5fab6 /src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp | |
parent | 64e438ed8392e945304818514124aa57d596b0ba (diff) |
CompilationDatabaseProjectManager: Fix unexpected double emit of signal
Do not rely on QFutureWatcher::isFinished(), which triggers a crash in
the plugin unit test with Qt 6 (race condition?).
Change-Id: I379d894ebd4a28a64b1e70e0cee6eef9ab720a14
Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp')
-rw-r--r-- | src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp index 0a0485e1896..fba6ca246b9 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp @@ -59,8 +59,7 @@ CompilationDbParser::CompilationDbParser(const QString &projectName, { connect(&m_parserWatcher, &QFutureWatcher<void>::finished, this, [this] { m_dbContents = m_parserWatcher.result(); - if (!m_treeScanner || m_treeScanner->isFinished()) - finish(ParseResult::Success); + parserJobFinished(); }); } @@ -80,6 +79,7 @@ void CompilationDbParser::start() return; } m_projectFileHash = newHash; + m_runningParserJobs = 0; // Thread 1: Scan disk. if (!m_rootPath.isEmpty()) { @@ -109,10 +109,9 @@ void CompilationDbParser::start() Core::ProgressManager::addTask(m_treeScanner->future(), tr("Scan \"%1\" project tree").arg(m_projectName), "CompilationDatabase.Scan.Tree"); - connect(m_treeScanner, &TreeScanner::finished, this, [this] { - if (m_parserWatcher.isFinished()) - finish(ParseResult::Success); - }); + ++m_runningParserJobs; + connect(m_treeScanner, &TreeScanner::finished, + this, &CompilationDbParser::parserJobFinished); } // Thread 2: Parse the project file. @@ -120,6 +119,7 @@ void CompilationDbParser::start() Core::ProgressManager::addTask(future, tr("Parse \"%1\" project").arg(m_projectName), "CompilationDatabase.Parse"); + ++m_runningParserJobs; m_parserWatcher.setFuture(future); } @@ -143,6 +143,12 @@ QList<FileNode *> CompilationDbParser::scannedFiles() const : QList<FileNode *>(); } +void CompilationDbParser::parserJobFinished() +{ + if (--m_runningParserJobs == 0) + finish(ParseResult::Success); +} + void CompilationDbParser::finish(ParseResult result) { emit finished(result); |