aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cpptools/cppcompletionassist.h
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2014-04-10 11:13:37 -0400
committerErik Verbruggen <erik.verbruggen@digia.com>2014-04-14 10:29:57 +0200
commit9b2672cb051506fa88c8432ba41911471866793a (patch)
treecb45df047444fadbf3c203ae38d042b3bb302bee /src/plugins/cpptools/cppcompletionassist.h
parent291b80cb330f6f7a802ad9039c6e4294caee61b1 (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.h6
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;