SL-17425 Crash when closing two dependent floaters
dependent_it in llfloater was not valid after dependent floater removed itself from the listmaster
parent
ed74d15246
commit
d1265cda36
|
|
@ -276,7 +276,7 @@ void LLAudioEngine::idle(F32 max_decode_time)
|
|||
{
|
||||
// The source is done playing, clean it up.
|
||||
delete sourcep;
|
||||
mAllSources.erase(iter++);
|
||||
iter = mAllSources.erase(iter);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ void LLStreamingAudio_FMODSTUDIO::killDeadStreams()
|
|||
{
|
||||
LL_INFOS("FMOD") << "Closed dead stream" << LL_ENDL;
|
||||
delete streamp;
|
||||
mDeadStreams.erase(iter++);
|
||||
iter = mDeadStreams.erase(iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -999,7 +999,7 @@ void LLPluginProcessParent::poll(F64 timeout)
|
|||
while (itClean != sInstances.end())
|
||||
{
|
||||
if ((*itClean).second->isDone())
|
||||
sInstances.erase(itClean++);
|
||||
itClean = sInstances.erase(itClean);
|
||||
else
|
||||
++itClean;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -761,17 +761,13 @@ void LLFloater::closeFloater(bool app_quitting)
|
|||
for(handle_set_iter_t dependent_it = mDependents.begin();
|
||||
dependent_it != mDependents.end(); )
|
||||
{
|
||||
|
||||
LLFloater* floaterp = dependent_it->get();
|
||||
if (floaterp)
|
||||
{
|
||||
++dependent_it;
|
||||
floaterp->closeFloater(app_quitting);
|
||||
}
|
||||
else
|
||||
{
|
||||
mDependents.erase(dependent_it++);
|
||||
}
|
||||
dependent_it = mDependents.erase(dependent_it);
|
||||
if (floaterp)
|
||||
{
|
||||
floaterp->mDependeeHandle = LLHandle<LLFloater>();
|
||||
floaterp->closeFloater(app_quitting);
|
||||
}
|
||||
}
|
||||
|
||||
cleanupHandles();
|
||||
|
|
@ -1439,7 +1435,7 @@ void LLFloater::cleanupHandles()
|
|||
LLFloater* floaterp = dependent_it->get();
|
||||
if (!floaterp)
|
||||
{
|
||||
mDependents.erase(dependent_it++);
|
||||
dependent_it = mDependents.erase(dependent_it);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -154,8 +154,7 @@ void mark_dead_and_remove_if(T &c, const PredicateMatchRequest &matchPred)
|
|||
if (matchPred(*it))
|
||||
{
|
||||
(*it)->markDead();
|
||||
// *TDOO: When C++11 is in change the following line to: it = c.erase(it);
|
||||
c.erase(it++);
|
||||
it = c.erase(it);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4779,7 +4779,7 @@ void LLVivoxVoiceClient::sessionState::VerifySessions()
|
|||
if ((*it).expired())
|
||||
{
|
||||
LL_WARNS("Voice") << "Expired session found! removing" << LL_ENDL;
|
||||
mSession.erase(it++);
|
||||
it = mSession.erase(it);
|
||||
}
|
||||
else
|
||||
++it;
|
||||
|
|
@ -6834,7 +6834,7 @@ void LLVivoxVoiceClient::deleteVoiceFont(const LLUUID& id)
|
|||
if (list_iter->second == id)
|
||||
{
|
||||
LL_DEBUGS("VoiceFont") << "Removing " << id << " from the voice font list." << LL_ENDL;
|
||||
mVoiceFontList.erase(list_iter++);
|
||||
list_iter = mVoiceFontList.erase(list_iter);
|
||||
mVoiceFontListDirty = true;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue