Branch 'kolab/integration/4.13.0' - 2 commits - resources/imap
Christian Mollekopf
mollekopf at kolabsys.com
Mon Dec 1 13:13:02 CET 2014
resources/imap/imapresourcebase.cpp | 27 ++++++++++++++-------------
resources/imap/imapresourcebase.h | 1 +
2 files changed, 15 insertions(+), 13 deletions(-)
New commits:
commit 4e73e04b23aabc903e695bf897132bdcf3c9cd65
Merge: 6bf7244 5c4a908
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Mon Dec 1 13:12:48 2014 +0100
Merge remote-tracking branch 'kolab/kolab/integration/4.13.0' into kolab/integration/4.13.0
commit 6bf7244ca8dc7ebe2635aa3a5950877e72c8434c
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Mon Nov 17 16:40:52 2014 +0100
ImapResource: Cancel the current task if we disconnect while the login is ongoing.
Otherwise we may end up with a stuck startConnect task if the socket somehow disconnects during login.
diff --git a/resources/imap/imapresourcebase.cpp b/resources/imap/imapresourcebase.cpp
index 904f0a6..62d2457 100644
--- a/resources/imap/imapresourcebase.cpp
+++ b/resources/imap/imapresourcebase.cpp
@@ -97,7 +97,8 @@ ImapResourceBase::ImapResourceBase( const QString &id )
m_pool( new SessionPool( 2, this ) ),
mSubscriptions( 0 ),
m_idle( 0 ),
- m_settings( 0 )
+ m_settings( 0 ),
+ m_startConnectInProgress( false )
{
QTimer::singleShot( 0, this, SLOT(updateResourceName()) );
@@ -240,6 +241,7 @@ void ImapResourceBase::startConnect( const QVariant& )
taskDone();
return;
}
+ m_startConnectInProgress = true;
m_pool->disconnect(); // reset all state, delete any old account
ImapAccount *account = new ImapAccount;
@@ -287,15 +289,14 @@ int ImapResourceBase::configureSubscription(qlonglong windowId)
void ImapResourceBase::onConnectDone( int errorCode, const QString &errorString )
{
+ m_startConnectInProgress = false;
switch ( errorCode ) {
case SessionPool::NoError:
setOnline( true );
taskDone();
emit status( Idle, i18n( "Connection established." ) );
-
synchronizeCollectionTree();
break;
-
case SessionPool::PasswordRequestError:
case SessionPool::EncryptionError:
case SessionPool::LoginFailError:
@@ -304,24 +305,22 @@ void ImapResourceBase::onConnectDone( int errorCode, const QString &errorString
setOnline( false );
emit status( Broken, errorString );
cancelTask();
- return;
-
+ break;
case SessionPool::CouldNotConnectError:
emit status( Idle, i18n( "Server is not available." ) );
deferTask();
setTemporaryOffline((m_pool->account() && m_pool->account()->timeout() > 0) ? m_pool->account()->timeout() : 300);
- return;
-
+ break;
case SessionPool::ReconnectNeededError:
reconnect();
- return;
-
+ break;
case SessionPool::NoAvailableSessionError:
kFatal() << "Shouldn't happen";
- return;
+ break;
case SessionPool::CancelledError:
kWarning() << "Session login cancelled";
- return;
+ cancelTask();
+ break;
}
}
@@ -518,9 +517,7 @@ void ImapResourceBase::scheduleConnectionAttempt()
void ImapResourceBase::doSetOnline(bool online)
{
-#ifndef IMAPRESOURCE_NO_SOLID
kDebug() << "online=" << online;
-#endif
if ( !online ) {
Q_FOREACH(ResourceTask* task, m_taskList) {
task->kill();
@@ -531,6 +528,10 @@ void ImapResourceBase::doSetOnline(bool online)
if (m_pool->isConnected()) {
m_pool->disconnect();
}
+ if (m_startConnectInProgress) {
+ cancelTask();
+ m_startConnectInProgress = false;
+ }
if (m_idle) {
m_idle->stop();
delete m_idle;
diff --git a/resources/imap/imapresourcebase.h b/resources/imap/imapresourcebase.h
index 04a7cf9..716a1cc 100644
--- a/resources/imap/imapresourcebase.h
+++ b/resources/imap/imapresourcebase.h
@@ -166,6 +166,7 @@ private:
ImapIdleManager *m_idle;
QTimer *m_statusMessageTimer;
QChar m_separatorCharacter;
+ bool m_startConnectInProgress;
};
#endif
More information about the commits
mailing list