Fix crash when expiring mail with the menu item (#88508)

svn path=/trunk/kdepim/; revision=346459
wilder-work
David Faure 22 years ago
parent 74053c5001
commit 0043ffd2ce
  1. 20
      jobscheduler.cpp
  2. 3
      jobscheduler.h

@ -61,7 +61,7 @@ void JobScheduler::registerTask( ScheduledTask* task )
if ( typeId ) {
KMFolder* folder = task->folder();
// Search for an identical task already scheduled
for( QValueList<ScheduledTask *>::ConstIterator it = mTaskList.begin(); it != mTaskList.end(); ++it ) {
for( QValueList<ScheduledTask *>::Iterator it = mTaskList.begin(); it != mTaskList.end(); ++it ) {
if ( (*it)->taskTypeId() == typeId && (*it)->folder() == folder ) {
#ifdef DEBUG_SCHEDULER
kdDebug(5006) << "JobScheduler: already having task type " << typeId << " for folder " << folder->label() << endl;
@ -69,6 +69,7 @@ void JobScheduler::registerTask( ScheduledTask* task )
delete task;
if ( !mCurrentTask && immediate ) {
ScheduledTask* task = *it;
removeTask( it );
runTaskNow( task );
}
return;
@ -91,6 +92,13 @@ void JobScheduler::registerTask( ScheduledTask* task )
}
}
void JobScheduler::removeTask( TaskList::Iterator& it )
{
if ( (*it)->isImmediate() )
--mPendingImmediateTasks;
mTaskList.remove( it );
}
void JobScheduler::notifyOpeningFolder( KMFolder* folder )
{
if ( mCurrentTask && mCurrentTask->folder() == folder ) {
@ -129,16 +137,14 @@ void JobScheduler::slotRunNextJob()
Q_ASSERT( mCurrentTask == 0 );
ScheduledTask* task = 0;
// Find a task suitable for being run
for( QValueList<ScheduledTask *>::Iterator it = mTaskList.begin(); it != mTaskList.end(); ++it ) {
for( TaskList::Iterator it = mTaskList.begin(); it != mTaskList.end(); ++it ) {
// Remove if folder died
KMFolder* folder = (*it)->folder();
if ( folder == 0 ) {
#ifdef DEBUG_SCHEDULER
kdDebug(5006) << " folder for task " << (*it) << " was deleted" << endl;
#endif
if ( (*it)->isImmediate() )
--mPendingImmediateTasks;
mTaskList.remove( it );
removeTask( it );
if ( !mTaskList.isEmpty() )
slotRunNextJob(); // to avoid the mess with invalid iterators :)
else
@ -155,9 +161,7 @@ void JobScheduler::slotRunNextJob()
#endif
if ( !folder->isOpened() ) {
task = *it;
mTaskList.remove( it );
if ( task->isImmediate() )
--mPendingImmediateTasks;
removeTask( it );
break;
}
}

@ -119,8 +119,9 @@ private:
void restartTimer();
void interruptCurrentTask();
void runTaskNow( ScheduledTask* task );
private:
typedef QValueList<ScheduledTask *> TaskList;
void removeTask( TaskList::Iterator& it );
private:
TaskList mTaskList; // FIFO of tasks to be run
QTimer mTimer;

Loading…
Cancel
Save