diff -r 883e91c086aa -r 48c22c726cf9 mtpfws/mtpfw/src/cmtpconnection.cpp --- a/mtpfws/mtpfw/src/cmtpconnection.cpp Tue Jul 06 15:13:34 2010 +0300 +++ b/mtpfws/mtpfw/src/cmtpconnection.cpp Wed Aug 18 10:38:51 2010 +0300 @@ -82,18 +82,16 @@ __FLOG(_L8("~CMTPConnection - Entry")); CloseAllSessions(); - // Remove any events not associated - // with a session - TSglQueIter iter(iEventQ); - iter.SetToFirst(); - CMTPEventLink* link = NULL; + //remove all events + DequeueAllEvents(); + + iSessions.ResetAndDestroy(); - while ((link = iter++) != NULL) - { - delete link; - } + if (iTransportConnection != NULL) + { + iTransportConnection->Unbind(*this); + } - iSessions.ResetAndDestroy(); //close the property iProperty.Close(); // delete the ‘name?property @@ -357,7 +355,7 @@ CompleteCloseConnection(); ret = ETrue; } - + SetState(EStateShutdown); PublishConnState(EDisconnectedFromHost); } @@ -372,10 +370,6 @@ CloseAllSessions(); iSessions.Reset(); - if (iTransportConnection != NULL) - { - iTransportConnection->Unbind(*this); - } //notify ConnectionMgr and corresponding transports of completion of connection close iSingletons.ConnectionMgr().ConnectionCloseComplete(iConnectionId); @@ -405,8 +399,12 @@ */ SessionOpenedL(KMTPSessionNone); + if (iTransportConnection != NULL) + { + iTransportConnection->Unbind(*this); + } iTransportConnection = &aTransportConnection; - iTransportConnection->BindL(*this); + iTransportConnection->BindL(*this); SetState(EStateOpen); } @@ -661,9 +659,16 @@ DequeueEvent(iEventQ.First()); if (iPendingEventCount > 0) { - // Forward the event to the transport connection layer. - __FLOG(_L8("Sending queued event")); - iTransportConnection->SendEventL(iEventQ.First()->iEvent); + if (NULL != iTransportConnection) + { + // Forward the event to the transport connection layer. + __FLOG(_L8("Sending queued event")); + iTransportConnection->SendEventL(iEventQ.First()->iEvent); + } + else + { + DequeueAllEvents(); + } } __FLOG(_L8("SendEventCompleteL - Exit")); @@ -707,7 +712,7 @@ iEventQ(_FOFF(CMTPEventLink, iLink)), iTransportConnection(&aTransportConnection) { - + iTransportConnection->BindL(*this); } /** @@ -1040,6 +1045,19 @@ __FLOG(_L8("RemoveEventsForSession - Exit")); } +void CMTPConnection::DequeueAllEvents() + { + TSglQueIter iter(iEventQ); + iter.SetToFirst(); + CMTPEventLink* link = NULL; + + while ((link = iter++) != NULL) + { + delete link; + } + iPendingEventCount = 0; + } + void CMTPConnection::DequeueEvent(CMTPEventLink* aLink) { iEventQ.Remove(*aLink);