Fix for a crash on startup/shutdown introduced in the tip of viewer-2-0 very recently.

list.erase(list.find()) is not safe, because erasing list.end() is undefined.  Check to make sure the find succeeded before doing the erase.

Reviewed by Richard at http://codereview.lindenlab.com/341001
master
Monroe Linden 2010-03-05 18:11:55 -08:00
parent 9412447b4f
commit eee50d1401
1 changed files with 10 additions and 2 deletions

View File

@ -207,7 +207,11 @@ void LLPopupView::addPopup(LLView* popup)
{
if (popup)
{
mPopups.erase(std::find(mPopups.begin(), mPopups.end(), popup->getHandle()));
popup_list_t::iterator iter = std::find(mPopups.begin(), mPopups.end(), popup->getHandle());
if(iter != mPopups.end())
{
mPopups.erase(iter);
}
mPopups.push_front(popup->getHandle());
}
}
@ -220,7 +224,11 @@ void LLPopupView::removePopup(LLView* popup)
{
gFocusMgr.setKeyboardFocus(NULL);
}
mPopups.erase(std::find(mPopups.begin(), mPopups.end(), popup->getHandle()));
popup_list_t::iterator iter = std::find(mPopups.begin(), mPopups.end(), popup->getHandle());
if(iter != mPopups.end())
{
mPopups.erase(iter);
}
popup->onTopLost();
}
}