summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llspatialpartition.cpp1
-rw-r--r--indra/newview/llvieweroctree.cpp10
-rw-r--r--indra/newview/llvieweroctree.h4
-rw-r--r--indra/newview/llvocache.cpp7
-rw-r--r--indra/newview/llvocache.h1
5 files changed, 21 insertions, 2 deletions
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 5c648c11e1..0d53950889 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -852,6 +852,7 @@ LLSpatialPartition::LLSpatialPartition(U32 data_mask, BOOL render_by_group, U32
LLSpatialPartition::~LLSpatialPartition()
{
+ cleanup();
}
LLSpatialGroup *LLSpatialPartition::put(LLDrawable *drawablep, BOOL was_visible)
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 5eda75753e..87e296012d 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -1325,8 +1325,13 @@ LLViewerOctreePartition::LLViewerOctreePartition() :
LLViewerOctreePartition::~LLViewerOctreePartition()
{
- delete mOctree;
- mOctree = NULL;
+ cleanup();
+}
+
+void LLViewerOctreePartition::cleanup()
+{
+ delete mOctree;
+ mOctree = nullptr;
}
BOOL LLViewerOctreePartition::isOcclusionEnabled()
@@ -1334,6 +1339,7 @@ BOOL LLViewerOctreePartition::isOcclusionEnabled()
return mOcclusionEnabled || LLPipeline::sUseOcclusion > 2;
}
+
//-----------------------------------------------------------------------------------
//class LLViewerOctreeCull definitions
//-----------------------------------------------------------------------------------
diff --git a/indra/newview/llvieweroctree.h b/indra/newview/llvieweroctree.h
index 11ba7e4f1e..e6974b0f84 100644
--- a/indra/newview/llvieweroctree.h
+++ b/indra/newview/llvieweroctree.h
@@ -352,6 +352,10 @@ public:
virtual S32 cull(LLCamera &camera, bool do_occlusion) = 0;
BOOL isOcclusionEnabled();
+protected:
+ // MUST call from destructor of any derived classes (SL-17276)
+ void cleanup();
+
public:
U32 mPartitionType;
U32 mDrawableType;
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index e10a9f9bcb..db8ad183f0 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -632,6 +632,13 @@ LLVOCachePartition::LLVOCachePartition(LLViewerRegion* regionp)
new LLVOCacheGroup(mOctree, this);
}
+LLVOCachePartition::~LLVOCachePartition()
+{
+ // SL-17276 make sure to do base class cleanup while this instance
+ // can still be treated as an LLVOCachePartition
+ cleanup();
+}
+
bool LLVOCachePartition::addEntry(LLViewerOctreeEntry* entry)
{
llassert(entry->hasVOCacheEntry());
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index c510ff77fc..55a13d934d 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -189,6 +189,7 @@ class LLVOCachePartition : public LLViewerOctreePartition
{
public:
LLVOCachePartition(LLViewerRegion* regionp);
+ virtual ~LLVOCachePartition();
bool addEntry(LLViewerOctreeEntry* entry);
void removeEntry(LLViewerOctreeEntry* entry);