From 2778a5adab13a16f4a6b3cda0980fa3b4f2b3a5e Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 16 Jul 2019 11:48:08 +0200 Subject: CppTools: Fix updating pending queue in CppLocatorData Fix that the invocations CppLocatorData::onDocumentUpdated(Document{"bla.cpp", revision=5}), CppLocatorData::onDocumentUpdated(Document{"bla.cpp", revision=3}), would add two entries in m_pendingDocuments. The document from the latter invocation should be ignored due to its outdated revision. Change-Id: I5e9eb4de77f59633d5525d808bd60ca1259f894d Reviewed-by: Christian Stenger --- src/plugins/cpptools/cpplocatordata.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/plugins/cpptools/cpplocatordata.cpp b/src/plugins/cpptools/cpplocatordata.cpp index d736736191..f650859711 100644 --- a/src/plugins/cpptools/cpplocatordata.cpp +++ b/src/plugins/cpptools/cpplocatordata.cpp @@ -44,16 +44,18 @@ void CppLocatorData::onDocumentUpdated(const CPlusPlus::Document::Ptr &document) { QMutexLocker locker(&m_pendingDocumentsMutex); - int i = 0, ei = m_pendingDocuments.size(); - for (; i < ei; ++i) { + bool isPending = false; + for (int i = 0, ei = m_pendingDocuments.size(); i < ei; ++i) { const CPlusPlus::Document::Ptr &doc = m_pendingDocuments.at(i); - if (doc->fileName() == document->fileName() && doc->revision() <= document->revision()) { - m_pendingDocuments[i] = document; + if (doc->fileName() == document->fileName()) { + isPending = true; + if (document->revision() >= doc->revision()) + m_pendingDocuments[i] = document; break; } } - if (i == ei && QFileInfo(document->fileName()).suffix() != "moc") + if (!isPending && QFileInfo(document->fileName()).suffix() != "moc") m_pendingDocuments.append(document); flushPendingDocument(false); -- cgit v1.2.3