diff options
author | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2014-04-10 11:13:37 -0400 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-04-14 10:29:57 +0200 |
commit | 9b2672cb051506fa88c8432ba41911471866793a (patch) | |
tree | cb45df047444fadbf3c203ae38d042b3bb302bee /src/plugins/cpptools/cppcompletionassist.h | |
parent | 291b80cb330f6f7a802ad9039c6e4294caee61b1 (diff) |
CppTools: Fix data race when accessing the editor revision
Addresses the following findings of QTCREATORBUG-12030:
* qtc.helgrind.plugintests.txt#2
* qtc.helgrind.usingEditors1.txt#1
Helgrind report (truncated):
Possible data race during write of size 4 at 0x23679618 by thread #1
Locks held: none
at 0x6819003: ???
by 0x681D713: ???
by 0x68200DE: ???
by 0x684B8F8: QTextCursor::insertText(QString const&, QTextCharFormat const&)
by 0x684BCB9: QTextCursor::insertText(QString const&)
by 0x139DA06C: TextEditor::BaseTextEditorWidget::keyPressEvent(QKeyEvent*) (basetexteditor.cpp:1866)
by 0x184C999F: CppEditor::Internal::CPPEditorWidget::keyPressEvent(QKeyEvent*) (cppeditor.cpp:1416)
This conflicts with a previous read of size 4 by thread #18
Locks held: none
at 0x680BC54: QTextDocument::revision() const
by 0x159047F3: CppTools::CppEditorSupport::editorRevision() const (cpptoolseditorsupport.cpp:198)
by 0x158E39BF: CppTools::Internal::CppModelManager::buildWorkingCopyList() (cppmodelmanager.cpp:525)
by 0x158E3D5B: CppTools::Internal::CppModelManager::workingCopy() const (cppmodelmanager.cpp:544)
by 0x1589FF6F: CppTools::Internal::CppCompletionAssistInterface::getCppSpecifics() const (cppcompletionassist.cpp:1957)
by 0x158A1158: CppTools::Internal::CppCompletionAssistInterface::snapshot() const (cppcompletionassist.h:200)
by 0x1589707C: CppTools::Internal::CppCompletionAssistProcessor::startCompletionInternal(QString, unsigned int, unsigned int, QString const&, int) (cppcompletionassist.cpp:1212)
by 0x15893CC7: CppTools::Internal::CppCompletionAssistProcessor::startCompletionHelper() (cppcompletionassist.cpp:970)
---
Possible data race during write of size 4 at 0x24C8AD18 by thread #1
Locks held: none
at 0x684AF23: QTextCursor::beginEditBlock()
by 0x139D7D05: TextEditor::BaseTextEditorWidget::keyPressEvent(QKeyEvent*) (basetexteditor.cpp:1578)
by 0x184C999F: CppEditor::Internal::CPPEditorWidget::keyPressEvent(QKeyEvent*) (cppeditor.cpp:1416)
...
by 0x40F15A: main (main.cpp:533)
This conflicts with a previous read of size 4 by thread #11
Locks held: none
at 0x680BC54: QTextDocument::revision() const
by 0x159048D3: CppTools::CppEditorSupport::editorRevision() const (cpptoolseditorsupport.cpp:198)
by 0x158E3A9F: CppTools::Internal::CppModelManager::buildWorkingCopyList() (cppmodelmanager.cpp:525)
by 0x158E3E3B: CppTools::Internal::CppModelManager::workingCopy() const (cppmodelmanager.cpp:544)
by 0x1590741E: parse(QFutureInterface<void>&, QSharedPointer<CppTools::SnapshotUpdater>) (cpptoolseditorsupport.cpp:299)
Task-number: QTCREATORBUG-12030
Change-Id: Idf0aa47f1f6bfd6814a961fe39d3b19b98f934f5
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppcompletionassist.h')
-rw-r--r-- | src/plugins/cpptools/cppcompletionassist.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h index ae2e45a23e..4c952afb90 100644 --- a/src/plugins/cpptools/cppcompletionassist.h +++ b/src/plugins/cpptools/cppcompletionassist.h @@ -31,6 +31,7 @@ #define CPPCOMPLETIONASSIST_H #include "cppcompletionassistprovider.h" +#include "cppmodelmanagerinterface.h" #include <cplusplus/Icons.h> #include <cplusplus/TypeOfExpression.h> @@ -175,11 +176,13 @@ public: CppCompletionAssistInterface(TextEditor::BaseTextEditor *editor, QTextDocument *textDocument, int position, - TextEditor::AssistReason reason) + TextEditor::AssistReason reason, + const CppModelManagerInterface::WorkingCopy &workingCopy) : TextEditor::DefaultAssistInterface(textDocument, position, editor->document()->filePath(), reason) , m_editor(editor) , m_gotCppSpecifics(false) + , m_workingCopy(workingCopy) {} CppCompletionAssistInterface(QTextDocument *textDocument, @@ -206,6 +209,7 @@ private: TextEditor::BaseTextEditor *m_editor; mutable bool m_gotCppSpecifics; + CppModelManagerInterface::WorkingCopy m_workingCopy; mutable CPlusPlus::Snapshot m_snapshot; mutable QStringList m_includePaths; mutable QStringList m_frameworkPaths; |