[Kde-pim] [nepomuk-core/KDE/4.10] libnepomukcore/resource: Don't lock the RM mutex just to check if our URI is empty, check it directly.

David Faure faure at kde.org
Fri Mar 8 12:50:10 GMT 2013


Git commit 71985b86333444fda56a96fa30d4e9ac44954f8b by David Faure.
Committed on 08/03/2013 at 13:48.
Pushed by dfaure into branch 'KDE/4.10'.

Don't lock the RM mutex just to check if our URI is empty, check it directly.

This leads to a major speed up in kmail, which I found to be very often
stuck on that RM mutex in the main thread, even though we prepare the resource
in a different thread (in asyncnepomukretriever) so all props are available.
CCMAIL: kde-pim at kde.org

M  +4    -0    libnepomukcore/resource/resource.cpp
M  +3    -1    libnepomukcore/resource/resourcedata.cpp

http://commits.kde.org/nepomuk-core/71985b86333444fda56a96fa30d4e9ac44954f8b

diff --git a/libnepomukcore/resource/resource.cpp b/libnepomukcore/resource/resource.cpp
index df02be7..7158802 100644
--- a/libnepomukcore/resource/resource.cpp
+++ b/libnepomukcore/resource/resource.cpp
@@ -696,6 +696,10 @@ Nepomuk2::Resource Nepomuk2::Resource::fromResourceUri( const KUrl& uri, const N
 
 void Nepomuk2::Resource::determineFinalResourceData() const
 {
+    if (!m_data->uri().isEmpty()) {
+        return;
+    }
+
     QMutexLocker lock( &m_data->rm()->mutex );
 
     // Get an initialized ResourceData instance
diff --git a/libnepomukcore/resource/resourcedata.cpp b/libnepomukcore/resource/resourcedata.cpp
index b4c4bcc..84ab3df 100644
--- a/libnepomukcore/resource/resourcedata.cpp
+++ b/libnepomukcore/resource/resourcedata.cpp
@@ -106,6 +106,7 @@ Nepomuk2::ResourceData::~ResourceData()
 
 bool Nepomuk2::ResourceData::isFile()
 {
+    QMutexLocker lock(&m_modificationMutex);
     return( m_uri.scheme() == QLatin1String("file") ||
             m_nieUrl.scheme() == QLatin1String("file") ||
             hasProperty( RDF::type(), NFO::FileDataObject() ) );
@@ -115,6 +116,7 @@ bool Nepomuk2::ResourceData::isFile()
 
 QUrl Nepomuk2::ResourceData::uri() const
 {
+    QMutexLocker lock(&m_modificationMutex);
     return m_uri;
 }
 
@@ -156,6 +158,7 @@ QUrl Nepomuk2::ResourceData::type()
 
 void Nepomuk2::ResourceData::resetAll( bool isDelete )
 {
+    QMutexLocker locker(&m_modificationMutex);
     // remove us from all caches (store() will re-insert us later if necessary)
     m_rm->mutex.lock();
 
@@ -176,7 +179,6 @@ void Nepomuk2::ResourceData::resetAll( bool isDelete )
     m_rm->mutex.unlock();
 
     // reset all variables
-    QMutexLocker locker(&m_modificationMutex);
     m_uri.clear();
     m_nieUrl.clear();
     m_naoIdentifier.clear();
_______________________________________________
KDE PIM mailing list kde-pim at kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/



More information about the kde-pim mailing list