From b0f7ad8e188ec7738d6f1d0aeb302807557afcff Mon Sep 17 00:00:00 2001 From: Beq Date: Mon, 30 Sep 2024 13:14:07 +0100 Subject: [PATCH] FIRE-34587 bugsplat - echoes of previous mirror related splats. Assumption: When a viewer object is destroyed and unregistered, references to it in mNearestHero and mDefaultProbe->mViewerObject are not cleared, leading to dangling pointers. --- indra/newview/llheroprobemanager.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp index 09b5a823b9..7e1a997576 100644 --- a/indra/newview/llheroprobemanager.cpp +++ b/indra/newview/llheroprobemanager.cpp @@ -640,7 +640,7 @@ bool LLHeroProbeManager::registerViewerObject(LLVOVolume* drawablep) // Probe isn't in our list for consideration. Add it. mHeroVOList.push_back(drawablep); return true; - } + } return false; } @@ -652,4 +652,16 @@ void LLHeroProbeManager::unregisterViewerObject(LLVOVolume* drawablep) { mHeroVOList.erase(found_itr); } + // FIRE-34587 - Bugsplat crash in getIsDynamic due to lifetime management of hero probe and underlying objects + // If the unregistered object is mNearestHero, reset mNearestHero and mDefaultProbe->mViewerObject + if (drawablep == mNearestHero) + { + mNearestHero = nullptr; + if (mDefaultProbe.notNull()) + { + mDefaultProbe->mViewerObject = nullptr; + } + } + // + }