forked from qt-creator/qt-creator
Fix a possible crash in ClangEditorDocumentProcessor
Use QFutureSynchronizer in order to ensure that all threads have finished on shutdown. Fixes: QTCREATORBUG-25673 Change-Id: I3a6a808ada389bc51a1f0149dfc112768929a20d Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -91,15 +91,14 @@ ClangEditorDocumentProcessor::ClangEditorDocumentProcessor(
|
||||
this, &ClangEditorDocumentProcessor::cppDocumentUpdated);
|
||||
connect(&m_builtinProcessor, &CppTools::BuiltinEditorDocumentProcessor::semanticInfoUpdated,
|
||||
this, &ClangEditorDocumentProcessor::semanticInfoUpdated);
|
||||
|
||||
m_parserSynchronizer.setCancelOnWait(true);
|
||||
}
|
||||
|
||||
ClangEditorDocumentProcessor::~ClangEditorDocumentProcessor()
|
||||
{
|
||||
m_updateBackendDocumentTimer.stop();
|
||||
|
||||
m_parserWatcher.cancel();
|
||||
m_parserWatcher.waitForFinished();
|
||||
|
||||
if (m_projectPart)
|
||||
closeBackendDocument();
|
||||
}
|
||||
@@ -120,6 +119,7 @@ void ClangEditorDocumentProcessor::runImpl(
|
||||
this, &ClangEditorDocumentProcessor::onParserFinished);
|
||||
const QFuture<void> future = ::Utils::runAsync(&runParser, parser(), updateParams);
|
||||
m_parserWatcher.setFuture(future);
|
||||
m_parserSynchronizer.addFuture(future);
|
||||
|
||||
// Run builtin processor
|
||||
m_builtinProcessor.runImpl(updateParams);
|
||||
|
||||
Reference in New Issue
Block a user