From 3ab93592c35c4bb9f87be809ce858e6ba48003c1 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 9 Mar 2021 13:53:34 +0100 Subject: [PATCH] CppLocatorData: Don't use recursive mutex Don't use recursive mutex in CppLocatorData class, as this is more expensive to construct than simple QMutex. Refactor the code so that every call to flushPendingDocument() is done with already locked m_pendingDocumentsMutex. This eliminates the need for recursive mutex. Remove unused allIndexItems() method. Change-Id: Ic7cb45bc3301d83768e69ee52f84ae159cb731a5 Reviewed-by: Eike Ziller --- src/plugins/cpptools/cpplocatordata.cpp | 10 ---------- src/plugins/cpptools/cpplocatordata.h | 6 +++--- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/plugins/cpptools/cpplocatordata.cpp b/src/plugins/cpptools/cpplocatordata.cpp index be2b948a96b..3154f66ddba 100644 --- a/src/plugins/cpptools/cpplocatordata.cpp +++ b/src/plugins/cpptools/cpplocatordata.cpp @@ -86,7 +86,6 @@ void CppLocatorData::onAboutToRemoveFiles(const QStringList &files) void CppLocatorData::flushPendingDocument(bool force) const { // TODO: move this off the UI thread and into a future. - QMutexLocker locker(&m_pendingDocumentsMutex); if (!force && m_pendingDocuments.size() < MaxPendingDocuments) return; if (m_pendingDocuments.isEmpty()) @@ -98,12 +97,3 @@ void CppLocatorData::flushPendingDocument(bool force) const m_pendingDocuments.clear(); m_pendingDocuments.reserve(MaxPendingDocuments); } - -QList CppLocatorData::allIndexItems( - const QHash> &items) const -{ - QList result; - for (const QList &subItems : items) - result.append(subItems); - return result; -} diff --git a/src/plugins/cpptools/cpplocatordata.h b/src/plugins/cpptools/cpplocatordata.h index b41bce07bfb..f8c853471f6 100644 --- a/src/plugins/cpptools/cpplocatordata.h +++ b/src/plugins/cpptools/cpplocatordata.h @@ -46,8 +46,8 @@ class CppLocatorData : public QObject public: void filterAllFiles(IndexItem::Visitor func) const { - flushPendingDocument(true); QMutexLocker locker(&m_pendingDocumentsMutex); + flushPendingDocument(true); QHash infosByFile = m_infosByFile; locker.unlock(); for (auto i = infosByFile.constBegin(), ei = infosByFile.constEnd(); i != ei; ++i) @@ -60,13 +60,13 @@ public slots: void onAboutToRemoveFiles(const QStringList &files); private: + // Ensure to protect every call to this method with m_pendingDocumentsMutex void flushPendingDocument(bool force) const; - QList allIndexItems(const QHash> &items) const; mutable SearchSymbols m_search; mutable QHash m_infosByFile; - mutable QRecursiveMutex m_pendingDocumentsMutex; + mutable QMutex m_pendingDocumentsMutex; mutable QVector m_pendingDocuments; };