From cd9871197c55395f6943c2911e9a7991540adfa4 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Wed, 5 Feb 2014 15:54:40 -0700
Subject: [PATCH] fix a memory crash caused by accessing deleted pointers.

---
 indra/newview/llvocache.cpp | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 6cf6028ae06..26f6987916c 100755
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -589,14 +589,14 @@ void LLVOCacheEntry::updateParentBoundingInfo(const LLVOCacheEntry* child)
 //-------------------------------------------------------------------
 LLVOCacheGroup::~LLVOCacheGroup()
 {
-	for(S32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++)
-	{
-		if(mOcclusionState[i] & ACTIVE_OCCLUSION)
-		{
-			((LLVOCachePartition*)mSpatialPartition)->removeOccluder(this);
-			break;
-		}
-	}
+	//for(S32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++)
+	//{
+	//	if(mOcclusionState[i] & ACTIVE_OCCLUSION)
+	//	{
+	//		((LLVOCachePartition*)mSpatialPartition)->removeOccluder(this);
+	//		break;
+	//	}
+	//}
 }
 
 //virtual
@@ -979,7 +979,11 @@ void LLVOCachePartition::processOccluders(LLCamera* camera)
 			group->doOcclusion(camera, &shift);
 			group->clearOcclusionState(LLOcclusionCullingGroup::ACTIVE_OCCLUSION);
 		}
-	}	
+	}
+
+	//safe to clear mOccludedGroups here because only the world camera accesses it.
+	mOccludedGroups.clear();
+	sNeedsOcclusionCheck = FALSE;
 }
 
 void LLVOCachePartition::resetOccluders()
-- 
GitLab