SL-20714 Crash accessing mControlAVBridge

Looks like control avatar was recreated after cleanup then object was
deleted
meow-7.2.2
Andrey Kleshchev 2023-12-12 00:15:29 +02:00 committed by akleshchev
parent 810a3d24c2
commit 8c1aa6d662
3 changed files with 12 additions and 2 deletions

View File

@ -4229,7 +4229,7 @@ void process_object_animation(LLMessageSystem *mesgsys, void **user_data)
LLObjectSignaledAnimationMap::instance().getMap()[uuid] = signaled_anims;
LLViewerObject *objp = gObjectList.findObject(uuid);
if (!objp)
if (!objp || objp->isDead())
{
LL_DEBUGS("AnimatedObjectsNotify") << "Received animation state for unknown object " << uuid << LL_ENDL;
return;

View File

@ -391,6 +391,7 @@ LLViewerObject::~LLViewerObject()
sNumObjects--;
sNumZombieObjects--;
llassert(mChildList.size() == 0);
llassert(mControlAvatar.isNull()); // Should have been cleaned by now
clearInventoryListeners();
}
@ -3106,6 +3107,10 @@ void LLViewerObject::updateControlAvatar()
return;
}
// caller isn't supposed to operate on a dead object,
// avatar was already cleaned up
llassert(!isDead());
bool should_have_control_avatar = false;
if (is_animated_object)
{

View File

@ -5494,6 +5494,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME;
llassert(!gCubeSnapshot);
if (group->isDead())
{
return;
}
if (group->changeLOD())
{
group->mLastUpdateDistance = group->mDistance;
@ -5577,7 +5582,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
LLVOVolume* vobj = drawablep->getVOVolume();
if (!vobj)
if (!vobj || vobj->isDead())
{
continue;
}