Skip to content

Commit b1bd083

Browse files
committed
#3413 Crash at removeFromLocalIDTable
Callstacks indicate that this happens only on shutdown. No point to erase items one at a time, just clear the list beforehand.
1 parent 6dc819e commit b1bd083

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

indra/newview/llviewerobjectlist.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,7 +1309,10 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)
13091309
// << objectp->getRegion()->getHost().getPort() << LL_ENDL;
13101310
//}
13111311

1312-
removeFromLocalIDTable(objectp);
1312+
if (!mIndexAndLocalIDToUUID.empty())
1313+
{
1314+
removeFromLocalIDTable(objectp);
1315+
}
13131316

13141317
if (objectp->onActiveList())
13151318
{
@@ -1381,11 +1384,19 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
13811384
void LLViewerObjectList::killAllObjects()
13821385
{
13831386
// Used only on global destruction.
1384-
LLViewerObject *objectp;
13851387

1388+
// Mass cleanup to not clear lists one item at a time
1389+
mIndexAndLocalIDToUUID.clear();
1390+
mActiveObjects.clear();
1391+
mMapObjects.clear();
1392+
1393+
LLViewerObject *objectp;
13861394
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
13871395
{
13881396
objectp = *iter;
1397+
objectp->setOnActiveList(false);
1398+
objectp->setListIndex(-1);
1399+
objectp->mOnMap = false;
13891400
killObject(objectp);
13901401
// Object must be dead, or it's the LLVOAvatarSelf which never dies.
13911402
llassert((objectp == gAgentAvatarp) || objectp->isDead());
@@ -1398,18 +1409,6 @@ void LLViewerObjectList::killAllObjects()
13981409
LL_WARNS() << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.size() << LL_ENDL;
13991410
mObjects.clear();
14001411
}
1401-
1402-
if (!mActiveObjects.empty())
1403-
{
1404-
LL_WARNS() << "Some objects still on active object list!" << LL_ENDL;
1405-
mActiveObjects.clear();
1406-
}
1407-
1408-
if (!mMapObjects.empty())
1409-
{
1410-
LL_WARNS() << "Some objects still on map object list!" << LL_ENDL;
1411-
mMapObjects.clear();
1412-
}
14131412
}
14141413

14151414
void LLViewerObjectList::cleanDeadObjects(bool use_timer)

0 commit comments

Comments
 (0)