summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-12-12 00:15:29 +0200
committerakleshchev <117672381+akleshchev@users.noreply.github.com>2023-12-12 00:40:22 +0200
commit8c1aa6d6623995e56e1cf5de127befcf9033c8ca (patch)
tree21f20ecba60349b832d4d4f9bbc6967a7eee4262 /indra/newview
parent810a3d24c2e3671f926091c062b101bdec6a1517 (diff)
SL-20714 Crash accessing mControlAVBridge
Looks like control avatar was recreated after cleanup then object was deleted
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llviewermessage.cpp2
-rw-r--r--indra/newview/llviewerobject.cpp5
-rw-r--r--indra/newview/llvovolume.cpp7
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;
}