summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonroe Linden <monroe@lindenlab.com>2009-11-19 15:01:27 -0800
committerMonroe Linden <monroe@lindenlab.com>2009-11-19 15:01:27 -0800
commit320dfa1d72c2eab9c59daf6bb13cc5001162c7b0 (patch)
treeedc5ea52066a27f95187b5b927fa180b6166d191
parent7be953512ab67e5f7659547232462f4510179196 (diff)
Added LLVOVolume::markDead(), which unhooks any prim media instances from the dead object.
-rw-r--r--indra/newview/llvovolume.cpp22
-rw-r--r--indra/newview/llvovolume.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index e5531a1497..8bfbfcb9c3 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -183,6 +183,22 @@ LLVOVolume::~LLVOVolume()
}
}
+void LLVOVolume::markDead()
+{
+ if (!mDead)
+ {
+ // TODO: tell LLMediaDataClient to remove this object from its queue
+
+ // Detach all media impls from this object
+ for(U32 i = 0 ; i < mMediaImplList.size() ; i++)
+ {
+ removeMediaImpl(i);
+ }
+ }
+
+ LLViewerObject::markDead();
+}
+
// static
void LLVOVolume::initClass()
@@ -1708,6 +1724,12 @@ void LLVOVolume::updateObjectMediaData(const LLSD &media_data_array)
void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool merge, bool ignore_agent)
{
+ if(mDead)
+ {
+ // If the object has been marked dead, don't process media updates.
+ return;
+ }
+
LLTextureEntry *te = getTE(texture_index);
//llinfos << "BEFORE: texture_index = " << texture_index
// << " hasMedia = " << te->hasMedia() << " : "
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index fb543efc04..70d203daf2 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -100,6 +100,7 @@ public:
public:
LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
+ /*virtual*/ void markDead(); // Override (and call through to parent) to clean up media references
/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);