[Bug 260751] Kmail was in the background when crash occured
Tobias Koenig
tokoe at kde.org
Sun Jan 2 15:47:04 GMT 2011
https://bugs.kde.org/show_bug.cgi?id=260751
Tobias Koenig <tokoe at kde.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |FIXED
--- Comment #3 from Tobias Koenig <tokoe kde org> 2011-01-02 16:47:01 ---
commit e2af53f0794533454a372db970e5d8587294f084
branch master
Author: Tobias Koenig <tokoe at kde.org>
Date: Sun Jan 2 16:33:39 2011 +0100
Do not crash on invalid progress item
A KPIM::ProgressItem can be deleted at any time, so keep
a QPointer on it and check for validity before accessing it.
BUG: 260751
diff --git a/libkdepim/agentprogressmonitor.cpp
b/libkdepim/agentprogressmonitor.cpp
index 320586a..afb6977 100644
--- a/libkdepim/agentprogressmonitor.cpp
+++ b/libkdepim/agentprogressmonitor.cpp
@@ -19,9 +19,11 @@
#include "agentprogressmonitor.h"
+#include <Akonadi/AgentManager>
+
#include <KDebug>
-#include <Akonadi/AgentManager>
+#include <QtCore/QPointer>
using namespace Akonadi;
using namespace KPIM;
@@ -43,7 +45,7 @@ class AgentProgressMonitor::Private
AgentProgressMonitor *const q;
AgentInstance agent;
- ProgressItem *const item;
+ QPointer<ProgressItem> const item;
};
void AgentProgressMonitor::Private::abort()
@@ -53,10 +55,12 @@ void AgentProgressMonitor::Private::abort()
void AgentProgressMonitor::Private::instanceProgressChanged( const
AgentInstance &instance )
{
- if( agent == instance ) {
+ if ( !item )
+ return;
+
+ if ( agent == instance ) {
agent = instance;
-// kDebug() << "Progress changed to" << agent.progress();
- if( agent.progress() >= 0 ) {
+ if ( agent.progress() >= 0 ) {
item->setProgress( agent.progress() );
}
}
@@ -64,28 +68,25 @@ void
AgentProgressMonitor::Private::instanceProgressChanged( const AgentInstance
void AgentProgressMonitor::Private::instanceStatusChanged( const AgentInstance
&instance )
{
- if( agent == instance ) {
+ if ( !item )
+ return;
+
+ if ( agent == instance ) {
agent = instance;
-// kDebug() << "Status changed to" << agent.status() << "message" <<
agent.statusMessage();
item->setStatus( agent.statusMessage() );
- switch( agent.status() ) {
+ switch ( agent.status() ) {
case AgentInstance::Idle:
- {
item->setComplete();
break;
- }
case AgentInstance::Running:
- {
break;
- }
case AgentInstance::Broken:
- {
item->disconnect( q ); // avoid abort call
item->cancel();
item->setComplete();
break;
- }
- default: Q_ASSERT( false );
+ default:
+ Q_ASSERT( false );
}
}
}
diff --git a/libkdepim/agentprogressmonitor.h
b/libkdepim/agentprogressmonitor.h
index 30403d2..da3b252 100644
--- a/libkdepim/agentprogressmonitor.h
+++ b/libkdepim/agentprogressmonitor.h
@@ -40,8 +40,7 @@ class AgentProgressMonitor : public QObject
protected:
// used by our friend ProgressManager
- AgentProgressMonitor( const Akonadi::AgentInstance &agent,
- ProgressItem *item );
+ AgentProgressMonitor( const Akonadi::AgentInstance &agent, ProgressItem
*item );
~AgentProgressMonitor();
private:
@@ -51,7 +50,6 @@ class AgentProgressMonitor : public QObject
Q_PRIVATE_SLOT( d, void abort() )
Q_PRIVATE_SLOT( d, void instanceProgressChanged( const
Akonadi::AgentInstance& ) )
Q_PRIVATE_SLOT( d, void instanceStatusChanged( const
Akonadi::AgentInstance& ) )
-
};
}
--
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the Kdepim-bugs
mailing list