summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2013-11-18 14:43:48 +0100
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-11-19 13:12:00 +0100
commit3b5e84e650c1c9219766c1edbbd8addb897f389a (patch)
tree536116df73b806d2a44ca02d6b935c285dbd7260 /src
parent4c9e3bbecf5af70426ddf9e88cf14cf6bb94cc7d (diff)
downloadqt-creator-3b5e84e650c1c9219766c1edbbd8addb897f389a.tar.gz
CppTools: Fix race condition when closing files
If parse() is called in another thread the CppToolsEditorSupport might be already destructed. Task-number: QTCREATORBUG-10548 Change-Id: Ie4215937eb1847b51bce8b080aca4925c0bee39f Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/cpptools/cpptoolseditorsupport.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp
index ed039bf900..89e787d081 100644
--- a/src/plugins/cpptools/cpptoolseditorsupport.cpp
+++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp
@@ -165,6 +165,7 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
CppEditorSupport::~CppEditorSupport()
{
+ m_documentParser.cancel();
m_highlighter.cancel();
m_futureSemanticInfo.cancel();
@@ -278,13 +279,15 @@ void CppEditorSupport::updateDocument()
m_updateDocumentTimer->start(m_updateDocumentInterval);
}
-static void parse(QFutureInterface<void> &future, CppEditorSupport *support)
+static void parse(QFutureInterface<void> &future, QSharedPointer<SnapshotUpdater> updater)
{
future.setProgressRange(0, 1);
+ if (future.isCanceled()) {
+ future.setProgressValue(1);
+ return;
+ }
CppModelManager *cmm = qobject_cast<CppModelManager *>(CppModelManager::instance());
- QSharedPointer<SnapshotUpdater> updater = support->snapshotUpdater();
-
updater->update(cmm->workingCopy());
cmm->finishedRefreshingSourceFiles(QStringList(updater->fileInEditor()));
@@ -304,7 +307,7 @@ void CppEditorSupport::updateDocumentNow()
if (m_highlightingSupport && !m_highlightingSupport->requiresSemanticInfo())
startHighlighting();
- m_documentParser = QtConcurrent::run(&parse, this);
+ m_documentParser = QtConcurrent::run(&parse, snapshotUpdater());
}
}