Skip to content
  • Nikolai Kosjar's avatar
    CppTools: Fix data race when accessing the editor revision · 9b2672cb
    Nikolai Kosjar authored
    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: default avatarOrgad Shaneh <orgads@gmail.com>
    Reviewed-by: default avatarErik Verbruggen <erik.verbruggen@digia.com>
    9b2672cb