[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