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

List:       kde-commits
Subject:    KDE/kdepimlibs
From:       Kevin Krammer <kevin.krammer () gmx ! at>
Date:       2010-09-25 15:30:47
Message-ID: 20100925153047.B4F75AC857 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1179474 by krake:

Merged revisions 1179472 via svnmerge from 
svn+ssh://krake@svn.kde.org/home/kde/branches/KDE/4.5/kdepimlibs

........
  r1179472 | krake | 2010-09-25 17:27:36 +0200 (Sat, 25 Sep 2010) | 3 lines
  
  Fix prepending of custom tasks. These were prepended to the generic task queue \
which is processed after e.g. the change relay queue.  Fix deferTask to put the task \
back into the queue it came from and at its beginning in order not to change the \
                ordering of tasks, e.g. process an item change before an item add
........


 _M            . (directory)  
 M  +6 -0      akonadi/resourcebase.h  
 M  +15 -1     akonadi/resourcescheduler.cpp  
 M  +2 -0      akonadi/resourcescheduler_p.h  


--- trunk/KDE/kdepimlibs/akonadi/resourcebase.h #1179473:1179474
@@ -478,6 +478,12 @@
      * Stops the execution of the current task and continues with the next one.
      * The current task will be tried again later.
      *
+     * This can be used to delay the task processing until the resource has reached \
a safe +     * state, e.g. login to a server succeeded.
+     *
+     * @note This does not change the order of tasks so if there is no task with \
higher priority +     *       e.g. a custom task added with #Prepend the deferred \
task will be processed again. +     *
      * @since 4.3
      */
     void deferTask();
--- trunk/KDE/kdepimlibs/akonadi/resourcescheduler.cpp #1179473:1179474
@@ -36,6 +36,7 @@
 
 ResourceScheduler::ResourceScheduler( QObject *parent ) :
     QObject( parent ),
+    mCurrentTasksQueue( -1 ),
     mOnline( false )
 {
 }
@@ -165,6 +166,8 @@
   QueueType queueType = GenericTaskQueue;
   if ( priority == ResourceBase::AfterChangeReplay )
     queueType = AfterChangeReplayQueue;
+  else if ( priority == ResourceBase::Prepend )
+    queueType = PrependTaskQueue;
   TaskList& queue = mTaskList[ queueType ];
 
   if ( queue.contains( t ) )
@@ -196,11 +199,15 @@
   }
 
   mCurrentTask = Task();
+  mCurrentTasksQueue = -1;
   scheduleNext();
 }
 
 void ResourceScheduler::deferTask()
 {
+  if ( mCurrentTask.type == Invalid )
+      return;
+
   if ( s_resourcetracker ) {
     QList<QVariant> argumentList;
     argumentList << QString::number( mCurrentTask.serial )
@@ -210,7 +217,11 @@
 
   Task t = mCurrentTask;
   mCurrentTask = Task();
-  mTaskList[GenericTaskQueue] << t;
+
+  Q_ASSERT( mCurrentTasksQueue >= 0 && mCurrentTasksQueue < NQueueCount );
+  mTaskList[mCurrentTasksQueue].prepend( t );
+  mCurrentTasksQueue = -1;
+
   signalTaskToTracker( t, "DeferedTask" );
 
   scheduleNext();
@@ -240,6 +251,7 @@
   for ( int i = 0; i < NQueueCount; ++i ) {
     if ( !mTaskList[ i ].isEmpty() ) {
       mCurrentTask = mTaskList[ i ].takeFirst();
+      mCurrentTasksQueue = i;
       break;
     }
   }
@@ -310,6 +322,7 @@
       // abort running task
       queueForTaskType( mCurrentTask.type ).prepend( mCurrentTask );
       mCurrentTask = Task();
+      mCurrentTasksQueue = -1;
     }
     // abort pending synchronous tasks, might take longer until the resource goes \
online again  TaskList& itemFetchQueue = queueForTaskType( FetchItem );
@@ -412,6 +425,7 @@
     queue.clear();
   }
   mCurrentTask = Task();
+  mCurrentTasksQueue = -1;
 }
 
 static const char s_taskTypes[][25] = {
--- trunk/KDE/kdepimlibs/akonadi/resourcescheduler_p.h #1179473:1179474
@@ -212,6 +212,7 @@
     // * then ItemFetch tasks, because they are made by blocking DBus calls
     // * then everything else.
     enum QueueType {
+      PrependTaskQueue,
       ChangeReplayQueue, // one task at most
       AfterChangeReplayQueue, // also one task at most, currently
       ItemFetchQueue,
@@ -226,6 +227,7 @@
     TaskList mTaskList[ NQueueCount ];
 
     Task mCurrentTask;
+    int mCurrentTasksQueue; // queue mCurrentTask came from
     bool mOnline;
 };
 


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

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