From d8f4980d41628601da7911ed30d5c1e4c2bdc5ec Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 16 Jun 2024 18:00:43 +0100 Subject: [PATCH] viewer#1672 Crash at setDefaultFOV Cherry pick from Main-A Some things can make a copy of camera, like LLViewerWindow::cubeSnapshot so need to store and clean up the connection --- indra/newview/llviewercamera.cpp | 14 +++++++++----- indra/newview/llviewercamera.h | 9 ++++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 5e19f2ae37..2813568c19 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -97,7 +97,13 @@ LLViewerCamera::LLViewerCamera() : LLCamera() mZoomSubregion = 1; mAverageSpeed = 0.f; mAverageAngularSpeed = 0.f; - gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); + + mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2)); +} + +LLViewerCamera::~LLViewerCamera() +{ + mCameraAngleChangedSignal.disconnect(); } void LLViewerCamera::updateCameraLocation(const LLVector3 ¢er, const LLVector3 &up_direction, const LLVector3 &point_of_interest) @@ -909,10 +915,8 @@ BOOL LLViewerCamera::isDefaultFOVChanged() return FALSE; } -// static -void LLViewerCamera::updateCameraAngle( void* user_data, const LLSD& value) +void LLViewerCamera::updateCameraAngle(const LLSD& value) { - LLViewerCamera* self=(LLViewerCamera*)user_data; - self->setDefaultFOV(value.asReal()); + setDefaultFOV(value.asReal()); } diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index 3bbb33f82c..0dedff46fb 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -43,6 +43,7 @@ class alignas(16) LLViewerCamera : public LLCamera, public LLSimpleton