From 83a628a431b569555ea68588e18a49159acbfd0c Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Thu, 25 Jul 2013 16:53:01 -0600
Subject: [PATCH] fix for SH-4298: Interesting: Viewer crash in
 LLViewerOctreeCull and SH-4341: Interesting: Viewer crash in
 LLViewerOctreeCull

---
 indra/newview/llvieweroctree.cpp | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 7b3186d40a3..bba3d26e09e 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -464,15 +464,16 @@ bool LLviewerOctreeGroup::removeFromGroup(LLViewerOctreeEntry* entry)
 	llassert(!entry->getGroup());
 
 	unbound();
+	setState(OBJECT_DIRTY);
+
 	if (mOctreeNode)
 	{
-		if (!mOctreeNode->remove(entry))
+		if (!mOctreeNode->remove(entry)) //this could cause *this* pointer to be destroyed, so no more function calls after this.
 		{
 			OCT_ERRS << "Could not remove LLVOCacheEntry from LLVOCacheOctreeGroup" << llendl;
 			return false;
 		}
-	}
-	setState(OBJECT_DIRTY);
+	}	
 
 	return true;
 }
@@ -580,9 +581,10 @@ void LLviewerOctreeGroup::handleInsertion(const TreeNode* node, LLViewerOctreeEn
 //virtual 
 void LLviewerOctreeGroup::handleRemoval(const TreeNode* node, LLViewerOctreeEntry* obj)
 {
-	obj->setGroup(NULL);
 	unbound();
 	setState(OBJECT_DIRTY);
+
+	obj->setGroup(NULL); //this could cause *this* pointer to be destroyed. So no more function calls after this.	
 }
 	
 //virtual 
-- 
GitLab