From ad5a45624a702433d481c3dbc0f348a8755b367c Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Jun 2010 23:11:37 -0500 Subject: Fix for unaligned LLVector4a causing crash in attachObject. --- indra/newview/llvoavatar.cpp | 17 ++++++++++++++--- indra/newview/llvoavatar.h | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 05114c1ca4..63c2ce87ca 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -683,7 +683,8 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, { LLMemType mt(LLMemType::MTYPE_AVATAR); //VTResume(); // VTune - + mImpostorExtents = (LLVector4a*) ll_aligned_malloc_16(32); + // mVoiceVisualizer is created by the hud effects manager and uses the HUD Effects pipeline const BOOL needsSendToSim = false; // currently, this HUD effect doesn't need to pack and unpack data to do its job mVoiceVisualizer = ( LLVoiceVisualizer *)LLHUDManager::getInstance()->createViewerEffect( LLHUDObject::LL_HUD_EFFECT_VOICE_VISUALIZER, needsSendToSim ); @@ -829,6 +830,9 @@ LLVOAvatar::~LLVOAvatar() mAnimationSources.clear(); + ll_aligned_free_16(mImpostorExtents); + mImpostorExtents = NULL; + lldebugs << "LLVOAvatar Destructor end" << llendl; } @@ -5558,8 +5562,7 @@ LLViewerJointAttachment* LLVOAvatar::getTargetAttachmentPoint(LLViewerObject* vi // correctly, but putting this check in here to be safe. if (attachmentID & ATTACHMENT_ADD) { - llwarns << "Got an attachment with ATTACHMENT_ADD mask, removing ( attach pt:" << attachmentID << " )" << llendl; - attachmentID &= ~ATTACHMENT_ADD; + llwarns << "Got an attachment with ATTACHMENT_ADD mask, removing ( attach pt:" << attachmentID << " )" << llendl; attachmentID &= ~ATTACHMENT_ADD; } LLViewerJointAttachment* attachment = get_if_there(mAttachmentPoints, attachmentID, (LLViewerJointAttachment*)NULL); @@ -5680,6 +5683,14 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object) return TRUE; } } + + std::vector >::iterator iter = std::find(mPendingAttachment.begin(), mPendingAttachment.end(), viewer_object); + if (iter != mPendingAttachment.end()) + { + mPendingAttachment.erase(iter); + return TRUE; + } + return FALSE; } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index b4da8ba5a4..358a1c256f 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -405,7 +405,7 @@ private: LLVector3 mImpostorOffset; LLVector2 mImpostorDim; BOOL mNeedsAnimUpdate; - LL_ALIGN_16(LLVector4a mImpostorExtents[2]); + LLVector4a* mImpostorExtents; LLVector3 mImpostorAngle; F32 mImpostorDistance; F32 mImpostorPixelArea; -- cgit v1.2.3