diff options
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llvieweroctree.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/llvieweroctree.h | 4 | ||||
| -rw-r--r-- | indra/newview/llvocache.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llvocache.h | 1 | 
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); | 
