diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-12-12 00:15:29 +0200 | 
|---|---|---|
| committer | akleshchev <117672381+akleshchev@users.noreply.github.com> | 2023-12-12 00:40:22 +0200 | 
| commit | 8c1aa6d6623995e56e1cf5de127befcf9033c8ca (patch) | |
| tree | 21f20ecba60349b832d4d4f9bbc6967a7eee4262 /indra | |
| parent | 810a3d24c2e3671f926091c062b101bdec6a1517 (diff) | |
SL-20714 Crash accessing mControlAVBridge
Looks like control avatar was recreated after cleanup then object was
deleted
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llviewermessage.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 7 | 
3 files changed, 12 insertions, 2 deletions
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 8b6a6807e4..c50365db2a 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -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; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index d6443b0bfb..1458570de2 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -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)      { diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index ec2f490742..1e212250a3 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -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;  			}  | 
