aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <[email protected]>2021-09-15 16:32:11 +0200
committerChristian Kandeler <[email protected]>2021-09-16 07:23:25 +0000
commit32541fef3b01c5a2430a59ee110587fa19dd3689 (patch)
tree219027e529c42bf2b05daec213c2a3b60be5fab6 /src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp
parent64e438ed8392e945304818514124aa57d596b0ba (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.cpp18
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);