From 218db3de20a4647b99536fca9a00ea5a32f586f0 Mon Sep 17 00:00:00 2001 From: "mallinath@webrtc.org" Date: Tue, 24 Jan 2012 17:11:44 +0000 Subject: [PATCH] Iterator was invalid while removing entries from codec db maps. Review URL: http://webrtc-codereview.appspot.com/373003 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1534 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../video_coding/main/source/codec_database.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/modules/video_coding/main/source/codec_database.cc b/src/modules/video_coding/main/source/codec_database.cc index df3336e9cd..2a353ba5bb 100644 --- a/src/modules/video_coding/main/source/codec_database.cc +++ b/src/modules/video_coding/main/source/codec_database.cc @@ -484,19 +484,23 @@ VCMCodecDataBase::ResetReceiver() ReleaseDecoder(_ptrDecoder); _ptrDecoder = NULL; memset(&_receiveCodec, 0, sizeof(VideoCodec)); - for (DecoderMap::iterator it = _decMap.begin(); it != _decMap.end(); ++it) { + DecoderMap::iterator it = _decMap.begin(); + while (it != _decMap.end()) { if ((*it).second->_settings != NULL) { delete (*it).second->_settings; } delete (*it).second; _decMap.erase(it); + it = _decMap.begin(); } - for (ExternalDecoderMap::iterator it = _decExternalMap.begin(); - it != _decExternalMap.end(); ++it) { - delete (*it).second; - _decExternalMap.erase(it); + ExternalDecoderMap::iterator exterit = _decExternalMap.begin(); + while (exterit != _decExternalMap.begin()) { + delete (*exterit).second; + _decExternalMap.erase(exterit); + exterit = _decExternalMap.begin(); } + _currentDecIsExternal = false; return VCM_OK; }