fixed call of deleted pointer in std::map (patch from Vaio)

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7513 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2014-09-09 18:10:52 +00:00
parent 6bfe653330
commit 28b11a555a

View file

@ -466,15 +466,19 @@ void p3HistoryMgr::removeMessages(const std::list<uint32_t> &msgIds)
RsStackMutex stack(mHistoryMtx); /********** STACK LOCKED MTX ******/ RsStackMutex stack(mHistoryMtx); /********** STACK LOCKED MTX ******/
std::map<RsPeerId, std::map<uint32_t, RsHistoryMsgItem*> >::iterator mit; std::map<RsPeerId, std::map<uint32_t, RsHistoryMsgItem*> >::iterator mit;
for (mit = mMessages.begin(); mit != mMessages.end(); ++mit) { for (mit = mMessages.begin(); mit != mMessages.end(); ++mit)
{
iit = ids.begin(); iit = ids.begin();
while (iit != ids.end()) { while ( !ids.empty() || (iit != ids.end()) )
{
std::map<uint32_t, RsHistoryMsgItem*>::iterator lit = mit->second.find(*iit); std::map<uint32_t, RsHistoryMsgItem*>::iterator lit = mit->second.find(*iit);
if (lit != mit->second.end()) { if (lit != mit->second.end())
{
std::cerr << "**** Removing " << mit->first << " msg id = " << lit->first << std::endl;
delete(lit->second); delete(lit->second);
mit->second.erase(lit); mit->second.erase(lit);
std::cerr << "**** Removing " << mit->first << " msg id = " << lit->first << std::endl;
removedIds.push_back(*iit); removedIds.push_back(*iit);
iit = ids.erase(iit); iit = ids.erase(iit);
@ -483,21 +487,17 @@ void p3HistoryMgr::removeMessages(const std::list<uint32_t> &msgIds)
++iit; ++iit;
} }
if (ids.empty()) {
break;
}
} }
} }
if (removedIds.empty() == false) { if (!removedIds.empty())
{
IndicateConfigChanged(); IndicateConfigChanged();
for (iit = removedIds.begin(); iit != removedIds.end(); ++iit) { for (iit = removedIds.begin(); iit != removedIds.end(); ++iit)
RsServer::notify()->notifyHistoryChanged(*iit, NOTIFY_TYPE_DEL); RsServer::notify()->notifyHistoryChanged(*iit, NOTIFY_TYPE_DEL);
} }
} }
}
bool p3HistoryMgr::getEnable(uint32_t chat_type) bool p3HistoryMgr::getEnable(uint32_t chat_type)
{ {