diff --git a/resources/imap/sessionpool.h b/resources/imap/sessionpool.h --- a/resources/imap/sessionpool.h +++ b/resources/imap/sessionpool.h @@ -113,6 +113,7 @@ void killSession(KIMAP::Session *session, SessionTermination termination); void declareSessionReady(KIMAP::Session *session); void cancelSessionCreation(KIMAP::Session *session, int errorCode, const QString &errorString); + void requestPassword(); static qint64 m_requestCounter; diff --git a/resources/imap/sessionpool.cpp b/resources/imap/sessionpool.cpp --- a/resources/imap/sessionpool.cpp +++ b/resources/imap/sessionpool.cpp @@ -83,21 +83,26 @@ return m_initialConnectDone; } -bool SessionPool::connect(ImapAccount *account) +void SessionPool::requestPassword() { - if (m_account) { - return false; - } - - m_account = account; if (m_account->authenticationMode() == KIMAP::LoginJob::GSSAPI) { // for GSSAPI we don't have to ask for username/password, because it uses session wide tickets QMetaObject::invokeMethod(this, "onPasswordRequestDone", Qt::QueuedConnection, Q_ARG(int, PasswordRequesterInterface::PasswordRetrieved), Q_ARG(QString, QString())); } else { m_passwordRequester->requestPassword(); } +} + +bool SessionPool::connect(ImapAccount *account) +{ + if (m_account) { + return false; + } + + m_account = account; + requestPassword(); return true; } @@ -294,7 +299,7 @@ } } else if (m_unusedPool.size() + m_reservedPool.size() < m_maxPoolSize) { // We didn't reach the max pool size yet so create a new one - m_passwordRequester->requestPassword(); + requestPassword(); } else { // No session available, and max pool size reached if (!m_pendingRequests.isEmpty()) {