diff -r fa1df4b99609 -r ebe688cedc25 email/imap4mtm/imapsession/src/cimapsessionmanager.cpp --- a/email/imap4mtm/imapsession/src/cimapsessionmanager.cpp Thu Aug 19 09:51:11 2010 +0300 +++ b/email/imap4mtm/imapsession/src/cimapsessionmanager.cpp Tue Aug 31 15:11:31 2010 +0300 @@ -141,7 +141,11 @@ { __LOG_TEXT(aSessionList[session]->LogId(), "CImapSessionManager::Disconnect (async, list)"); - iDisconnectList.Append(aSessionList[session]); + TInt err = iDisconnectList.Append(aSessionList[session]); + if(err != KErrNone) + { + break; + } } iProgressState = TImap4GenericProgress::EDisconnecting; @@ -167,7 +171,11 @@ { __LOG_TEXT(aSessionList[session]->LogId(), "CImapSessionManager::Disconnect (sync, list)"); - iDisconnectList.Append(aSessionList[session]); + TInt err = iDisconnectList.Append(aSessionList[session]); + if(KErrNone != err) + { + CloseSessionStreams(aSessionList[session]); + } } ImmediateDisconnect(); @@ -187,9 +195,20 @@ // Create a disconnect list with just this one session iDisconnectList.Reset(); - iDisconnectList.Append(&aSession); + TInt err = iDisconnectList.Append(&aSession); + + if(KErrNone != err) + { + // remove contness of aSession + CImapSession& session = const_cast(aSession); + MOutputStream* outputStream = session.OutputStream(); + if (outputStream != NULL) + { + outputStream->Close(); + } + } + ImmediateDisconnect(); - __LOG_TEXT(aSession.LogId(), "CImapSessionManager::Disconnect() - END - (sync, session)"); }