diff -r d881023c13eb -r cbb1bfb7ebfb mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp --- a/mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp Mon May 03 12:58:40 2010 +0300 +++ b/mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp Fri May 14 16:21:14 2010 +0300 @@ -196,8 +196,16 @@ if (cl->ClientCount()==0) { MPX_DEBUG1("CMPXPlaybackServer::RemoveClient delete a player"); + CMPXPlaybackEngine* enginePtr = p; delete p; - iPlayers.Remove(i); + //Due to callbacks in PlaybackServer we have to remove engine from the iPlayers array after deleting. + //enginePtr is a invalid pointer as p is already deleted + //Find the index of deleted engine using its address + TInt engineIndex = iPlayers.Find(enginePtr); + if ( engineIndex != KErrNotFound ) + { + iPlayers.Remove(engineIndex); + } } break; }