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

List:       kde-commits
Subject:    KDE/kdebase/runtime/nepomuk/services/queryservice
From:       Sebastian Trueg <sebastian () trueg ! de>
Date:       2010-09-01 15:57:27
Message-ID: 20100901155727.7C212AC871 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1170607 by trueg:

* Properly delete open connections and folders on shutdown
* Do not rely on Query::isValid() when deciding if a folder was created with a Query \
object or a SPARQL string.  This fixes crashes when using invalid queries.

CCMAIL: aoszkar@gmail.com

 M  +5 -0      folder.cpp  
 M  +5 -0      folder.h  
 M  +8 -3      queryservice.cpp  


--- trunk/KDE/kdebase/runtime/nepomuk/services/queryservice/folder.cpp \
#1170606:1170607 @@ -32,6 +32,7 @@
 
 Nepomuk::Query::Folder::Folder( const Query& query, QObject* parent )
     : QObject( parent ),
+      m_isSparqlQueryFolder( false ),
       m_query( query )
 {
     init();
@@ -40,6 +41,7 @@
 
 Nepomuk::Query::Folder::Folder( const QString& query, const RequestPropertyMap& \
requestProps, QObject* parent )  : QObject( parent ),
+      m_isSparqlQueryFolder( true ),
       m_sparqlQuery( query ),
       m_requestProperties( requestProps )
 {
@@ -75,6 +77,9 @@
 Nepomuk::Query::Folder::~Folder()
 {
     m_searchThread->cancel();
+    // cannot use qDeleteAll since deleting a connection changes m_connections
+    while ( !m_connections.isEmpty() )
+        delete m_connections.first();
 }
 
 
--- trunk/KDE/kdebase/runtime/nepomuk/services/queryservice/folder.h #1170606:1170607
@@ -56,6 +56,8 @@
             Folder( const QString& sparqlQuery, const RequestPropertyMap& \
requestProps, QObject* parent = 0 );  ~Folder();
 
+            bool isSparqlQueryFolder() const { return m_isSparqlQueryFolder; }
+
             /**
              * \return A list of all cached results in the folder.
              * If initial listing is not finished yet, the results found
@@ -121,6 +123,9 @@
              */
             void removeConnection( FolderConnection* );
 
+            /// true if this query has been created with a string query rather than \
a Query object +            const bool m_isSparqlQueryFolder;
+
             /// if valid m_sparqlQuery and m_requestProperties are ignored
             Query m_query;
 
--- trunk/KDE/kdebase/runtime/nepomuk/services/queryservice/queryservice.cpp \
#1170606:1170607 @@ -49,6 +49,11 @@
 
 Nepomuk::Query::QueryService::~QueryService()
 {
+    // cannot use qDeleteAll since deleting a folder changes m_openQueryFolders
+    while ( !m_openQueryFolders.isEmpty() )
+        delete m_openQueryFolders.begin().value();
+    while ( !m_openSparqlFolders.isEmpty() )
+        delete m_openSparqlFolders.begin().value();
 }
 
 
@@ -135,10 +140,10 @@
 void Nepomuk::Query::QueryService::slotFolderAboutToBeDeleted( Folder* folder )
 {
     kDebug() << folder;
-    if ( folder->query().isValid() )
+    if ( folder->isSparqlQueryFolder() )
+        m_openSparqlFolders.remove( folder->sparqlQuery() );
+    else
         m_openQueryFolders.remove( folder->query() );
-    else
-        m_openSparqlFolders.remove( folder->sparqlQuery() );
 }
 
 #include "queryservice.moc"


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

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