forked from qt-creator/qt-creator
QbsProjectManager: Fix SOFT ASSERT: "future.isFinished()"
...in file qbsproject.cpp, line 940.
The assert can be triggered with e.g.:
1. Load a bigger qbs project, e.g. qtcreator.qbs.
2. Trigger project build as soon as possible.
3. Cancel the "Parsing C/C++" operation.
4. Wait until the build finished and the assert occurs.
This happens because CppModelManager::updateProjectInfo() since
commit 536ccc8a87
CppTools: Fix incompletely indexed project
will check whether the previous indexer run was canceled or not. If it
was canceled, it will trigger a full-reindexing of the project.
Updating the compiler call data is a special case and it should never
trigger an indexing operation, so introduce a dedicated update function
for this case.
Change-Id: I456945ccf2bf697aaeada572ed87f3acb21a5eaf
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -900,6 +900,19 @@ QFuture<void> CppModelManager::updateProjectInfo(const ProjectInfo &newProjectIn
|
|||||||
return indexerFuture;
|
return indexerFuture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProjectInfo CppModelManager::updateCompilerCallDataForProject(
|
||||||
|
ProjectExplorer::Project *project,
|
||||||
|
ProjectInfo::CompilerCallData &compilerCallData)
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&d->m_projectMutex);
|
||||||
|
|
||||||
|
ProjectInfo projectInfo = d->m_projectToProjectsInfo.value(project, ProjectInfo());
|
||||||
|
projectInfo.setCompilerCallData(compilerCallData);
|
||||||
|
d->m_projectToProjectsInfo.insert(project, projectInfo);
|
||||||
|
|
||||||
|
return projectInfo;
|
||||||
|
}
|
||||||
|
|
||||||
ProjectPart::Ptr CppModelManager::projectPartForId(const QString &projectPartId) const
|
ProjectPart::Ptr CppModelManager::projectPartForId(const QString &projectPartId) const
|
||||||
{
|
{
|
||||||
return d->m_projectPartIdToProjectProjectPart.value(projectPartId);
|
return d->m_projectPartIdToProjectProjectPart.value(projectPartId);
|
||||||
|
@@ -29,6 +29,7 @@
|
|||||||
#include "cpptools_global.h"
|
#include "cpptools_global.h"
|
||||||
|
|
||||||
#include "cppmodelmanagersupport.h"
|
#include "cppmodelmanagersupport.h"
|
||||||
|
#include "projectinfo.h"
|
||||||
#include "projectpart.h"
|
#include "projectpart.h"
|
||||||
#include "projectpartheaderpath.h"
|
#include "projectpartheaderpath.h"
|
||||||
|
|
||||||
@@ -56,7 +57,6 @@ class CppEditorDocumentHandle;
|
|||||||
class CppIndexingSupport;
|
class CppIndexingSupport;
|
||||||
class SymbolFinder;
|
class SymbolFinder;
|
||||||
class WorkingCopy;
|
class WorkingCopy;
|
||||||
class ProjectInfo;
|
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
class CppSourceProcessor;
|
class CppSourceProcessor;
|
||||||
@@ -95,6 +95,8 @@ public:
|
|||||||
QList<ProjectInfo> projectInfos() const;
|
QList<ProjectInfo> projectInfos() const;
|
||||||
ProjectInfo projectInfo(ProjectExplorer::Project *project) const;
|
ProjectInfo projectInfo(ProjectExplorer::Project *project) const;
|
||||||
QFuture<void> updateProjectInfo(const ProjectInfo &newProjectInfo);
|
QFuture<void> updateProjectInfo(const ProjectInfo &newProjectInfo);
|
||||||
|
ProjectInfo updateCompilerCallDataForProject(ProjectExplorer::Project *project,
|
||||||
|
ProjectInfo::CompilerCallData &compilerCallData);
|
||||||
|
|
||||||
/// \return The project part with the given project file
|
/// \return The project part with the given project file
|
||||||
ProjectPart::Ptr projectPartForId(const QString &projectPartId) const;
|
ProjectPart::Ptr projectPartForId(const QString &projectPartId) const;
|
||||||
|
@@ -935,9 +935,7 @@ void QbsProject::updateCppCompilerCallData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_codeModelProjectInfo.setCompilerCallData(data);
|
m_codeModelProjectInfo = modelManager->updateCompilerCallDataForProject(this, data);
|
||||||
const QFuture<void> future = modelManager->updateProjectInfo(m_codeModelProjectInfo);
|
|
||||||
QTC_CHECK(future.isFinished()); // No reparse of files expected
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QbsProject::updateQmlJsCodeModel()
|
void QbsProject::updateQmlJsCodeModel()
|
||||||
|
Reference in New Issue
Block a user