Branch 'kolab/integration/4.13.0' - 2 commits - resources/imap resources/kolab

Christian Mollekopf mollekopf at kolabsys.com
Fri Oct 24 15:59:17 CEST 2014


 resources/imap/resourcetask.cpp        |   77 ++++++++++++++++++++++++---------
 resources/imap/resourcetask.h          |    1 
 resources/kolab/kolabchangetagtask.cpp |    2 
 3 files changed, 60 insertions(+), 20 deletions(-)

New commits:
commit 4c2ad277dec69db91f78af5ee637dff476447969
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date:   Fri Oct 24 10:53:07 2014 +0200

    KolabResource: Don't overwrite tag remoteId with old value.
    
    We already stored the tag in TagChangeHelper, so simply call changeProcessed
    and don't overwrite the tag again with the original copy.

diff --git a/resources/kolab/kolabchangetagtask.cpp b/resources/kolab/kolabchangetagtask.cpp
index 845d445..942f403 100644
--- a/resources/kolab/kolabchangetagtask.cpp
+++ b/resources/kolab/kolabchangetagtask.cpp
@@ -77,5 +77,5 @@ void KolabChangeTagTask::onCancelTask(const QString &errorText)
 
 void KolabChangeTagTask::onChangeCommitted()
 {
-    changeCommitted(resourceState()->tag());
+    changeProcessed();
 }


commit 2555561d7fdce2976c63a35011f5cc1fa46b811d
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date:   Tue Oct 21 09:29:44 2014 +0200

    ImapResource: Block calls in ResourceTask after cancelTask
    
    If the task get's externally (not by the task itself) cancelled
    (i.e. by a dropped connection), the task my be running a job and once it
    returns i.e. cancel the task again.
    
    This results in ResourceBase methods getting called while no task is active,
    ending in an assert.
    
    This patch simply isolates ResourceTask once cancelTask has been called.

diff --git a/resources/imap/resourcetask.cpp b/resources/imap/resourcetask.cpp
index 5df0ab9..cc991d1 100644
--- a/resources/imap/resourcetask.cpp
+++ b/resources/imap/resourcetask.cpp
@@ -37,7 +37,8 @@ ResourceTask::ResourceTask( ActionIfNoSession action, ResourceStateInterface::Pt
     m_sessionRequestId( 0 ),
     m_session( 0 ),
     m_actionIfNoSession( action ),
-    m_resource( resource )
+    m_resource( resource ),
+    mCancelled( false )
 {
 
 }
@@ -248,106 +249,144 @@ QString ResourceTask::mailBoxForCollection( const Akonadi::Collection &collectio
 
 void ResourceTask::setIdleCollection( const Akonadi::Collection &collection )
 {
-  m_resource->setIdleCollection( collection );
+  if (!mCancelled) {
+    m_resource->setIdleCollection( collection );
+  }
 }
 
 void ResourceTask::applyCollectionChanges( const Akonadi::Collection &collection )
 {
-  m_resource->applyCollectionChanges( collection );
+  if (!mCancelled) {
+    m_resource->applyCollectionChanges( collection );
+  }
 }
 
 void ResourceTask::itemRetrieved( const Akonadi::Item &item )
 {
-  m_resource->itemRetrieved( item );
-  emitPercent(100);
+  if (!mCancelled) {
+    m_resource->itemRetrieved( item );
+    emitPercent(100);
+  }
   deleteLater();
 }
 
 void ResourceTask::itemsRetrieved( const Akonadi::Item::List &items )
 {
-  m_resource->itemsRetrieved( items );
+  if (!mCancelled) {
+    m_resource->itemsRetrieved( items );
+  }
 }
 
 void ResourceTask::itemsRetrievedIncremental( const Akonadi::Item::List &changed,
                                               const Akonadi::Item::List &removed )
 {
-  m_resource->itemsRetrievedIncremental( changed, removed );
+  if (!mCancelled) {
+    m_resource->itemsRetrievedIncremental( changed, removed );
+  }
 }
 
 void ResourceTask::itemsRetrievalDone()
 {
-  m_resource->itemsRetrievalDone();
+  if (!mCancelled) {
+    m_resource->itemsRetrievalDone();
+  }
   deleteLater();
 }
 
 void ResourceTask::setTotalItems(int totalItems)
 {
-  m_resource->setTotalItems(totalItems);
+  if (!mCancelled) {
+    m_resource->setTotalItems(totalItems);
+  }
 }
 
 void ResourceTask::changeCommitted( const Akonadi::Item &item )
 {
-  m_resource->itemChangeCommitted( item );
+  if (!mCancelled) {
+    m_resource->itemChangeCommitted( item );
+  }
   deleteLater();
 }
 
 void ResourceTask::changesCommitted(const Akonadi::Item::List& items)
 {
-  m_resource->itemsChangesCommitted( items );
+  if (!mCancelled) {
+    m_resource->itemsChangesCommitted( items );
+  }
   deleteLater();
 }
 
 void ResourceTask::searchFinished( const QVector<qint64> &result, bool isRid )
 {
-  m_resource->searchFinished( result, isRid );
+  if (!mCancelled) {
+    m_resource->searchFinished( result, isRid );
+  }
   deleteLater();
 }
 
 void ResourceTask::collectionsRetrieved( const Akonadi::Collection::List &collections )
 {
-  m_resource->collectionsRetrieved( collections );
+  if (!mCancelled) {
+    m_resource->collectionsRetrieved( collections );
+  }
   deleteLater();
 }
 
 void ResourceTask::collectionAttributesRetrieved(const Akonadi::Collection& col)
 {
-  m_resource->collectionAttributesRetrieved( col );
+  if (!mCancelled) {
+    m_resource->collectionAttributesRetrieved( col );
+  }
   deleteLater();
 }
 
 void ResourceTask::changeCommitted( const Akonadi::Collection &collection )
 {
-  m_resource->collectionChangeCommitted( collection );
+  if (!mCancelled) {
+    m_resource->collectionChangeCommitted( collection );
+  }
   deleteLater();
 }
 
 void ResourceTask::changeCommitted( const Akonadi::Tag &tag )
 {
+  if (!mCancelled) {
     m_resource->tagChangeCommitted( tag );
+  }
     deleteLater();
 }
 
 void ResourceTask::changeProcessed()
 {
-  m_resource->changeProcessed();
+  if (!mCancelled) {
+    m_resource->changeProcessed();
+  }
   deleteLater();
 }
 
 void ResourceTask::cancelTask( const QString &errorString )
 {
-  m_resource->cancelTask( errorString );
+  if (!mCancelled) {
+    mCancelled = true;
+    m_resource->cancelTask( errorString );
+  }
   deleteLater();
 }
 
 void ResourceTask::deferTask()
 {
-  m_resource->deferTask();
+  if (!mCancelled) {
+    mCancelled = true;
+    m_resource->deferTask();
+  }
   deleteLater();
 }
 
 void ResourceTask::restartItemRetrieval(Akonadi::Entity::Id col)
 {
-  m_resource->restartItemRetrieval(col);
+  if (!mCancelled) {
+    m_resource->restartItemRetrieval(col);
+  }
   deleteLater();
 }
 
diff --git a/resources/imap/resourcetask.h b/resources/imap/resourcetask.h
index 4c47358..3ccdd4c 100644
--- a/resources/imap/resourcetask.h
+++ b/resources/imap/resourcetask.h
@@ -163,6 +163,7 @@ private:
   KIMAP::Session *m_session;
   ActionIfNoSession m_actionIfNoSession;
   ResourceStateInterface::Ptr m_resource;
+  bool mCancelled;
 };
 
 #endif




More information about the commits mailing list