[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/nepomuk/core
From:       Sebastian Trueg <sebastian () trueg ! de>
Date:       2010-09-08 15:14:53
Message-ID: 20100908151453.1341EAC857 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1173076 by trueg:

Fixed a deadlock when one thread is listing resources while the other one is changing \
one of them

 M  +4 -4      resourcemanager.cpp  


--- trunk/KDE/kdelibs/nepomuk/core/resourcemanager.cpp #1173075:1173076
@@ -107,12 +107,12 @@
 
 QList<Nepomuk::ResourceData*> \
Nepomuk::ResourceManagerPrivate::allResourceDataOfType( const QUrl& type )  {
-    QMutexLocker lock( &mutex );
-
     QList<ResourceData*> l;
 
     if( !type.isEmpty() ) {
+        mutex.lock();
         QSet<ResourceData*> rdl = m_uriKickoffData.values().toSet();
+        mutex.unlock();
         for( QSet<ResourceData*>::iterator rdIt = rdl.begin();
              rdIt != rdl.end(); ++rdIt ) {
             ResourceData* rd = *rdIt;
@@ -133,15 +133,15 @@
 
 QList<Nepomuk::ResourceData*> \
Nepomuk::ResourceManagerPrivate::allResourceDataWithProperty( const QUrl& uri, const \
Variant& v )  {
-    QMutexLocker lock( &mutex );
-
     QList<ResourceData*> l;
 
     //
     // We need to cache m_uriKickoffData since it might be changed
     // in the loop by ResourceData::load()
     //
+    mutex.lock();
     QSet<ResourceData*> rdl = m_uriKickoffData.values().toSet();
+    mutex.unlock();
 
     //
     // make sure none of the ResourceData objects are deleted by ResourceData::load \
below


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic