diff -r 05b0d2323768 -r d240f0a77280 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp Fri Mar 12 15:44:36 2010 +0200 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp Mon Mar 15 12:42:31 2010 +0200 @@ -238,12 +238,10 @@ iIsSessionOpen = EFalse; TInt count = iActiveProcessors.Count(); PRINT1( _L( "MM MTP => CAbstractMediaMtpDataProvider::SessionClosedL, total processor count = %d" ), count ); - for ( TInt i = 0; i < count; i++ ) + while ( count-- ) { - MMmRequestProcessor* processor = iActiveProcessors[i]; + MMmRequestProcessor* processor = iActiveProcessors[count]; - // replaced for the Request() is invalid sometimes - // TUint32 sessionId( processor->Request().Uint32( TMTPTypeRequest::ERequestSessionID ) ); TUint32 sessionId = processor->SessionId(); if ( ( sessionId == aSession.iMTPId ) @@ -252,10 +250,11 @@ { processor->UsbDisconnect(); // Rollback - iActiveProcessors.Remove( i ); - if ( i == iActiveProcessor ) + iActiveProcessors.Remove( count ); + if ( count == iActiveProcessor ) { iActiveProcessorRemoved = ETrue; + iActiveProcessor = -1; // update iActiveProcessor } else {