@@ -1309,7 +1309,10 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)
1309
1309
// << objectp->getRegion()->getHost().getPort() << LL_ENDL;
1310
1310
// }
1311
1311
1312
- removeFromLocalIDTable (objectp);
1312
+ if (!mIndexAndLocalIDToUUID .empty ())
1313
+ {
1314
+ removeFromLocalIDTable (objectp);
1315
+ }
1313
1316
1314
1317
if (objectp->onActiveList ())
1315
1318
{
@@ -1381,11 +1384,19 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
1381
1384
void LLViewerObjectList::killAllObjects ()
1382
1385
{
1383
1386
// Used only on global destruction.
1384
- LLViewerObject *objectp;
1385
1387
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;
1386
1394
for (vobj_list_t ::iterator iter = mObjects .begin (); iter != mObjects .end (); ++iter)
1387
1395
{
1388
1396
objectp = *iter;
1397
+ objectp->setOnActiveList (false );
1398
+ objectp->setListIndex (-1 );
1399
+ objectp->mOnMap = false ;
1389
1400
killObject (objectp);
1390
1401
// Object must be dead, or it's the LLVOAvatarSelf which never dies.
1391
1402
llassert ((objectp == gAgentAvatarp ) || objectp->isDead ());
@@ -1398,18 +1409,6 @@ void LLViewerObjectList::killAllObjects()
1398
1409
LL_WARNS () << " LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects .size () << LL_ENDL;
1399
1410
mObjects .clear ();
1400
1411
}
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
- }
1413
1412
}
1414
1413
1415
1414
void LLViewerObjectList::cleanDeadObjects (bool use_timer)
0 commit comments