diff options
| author | Xiaohong Bao <bao@lindenlab.com> | 2013-11-26 17:44:54 -0700 | 
|---|---|---|
| committer | Xiaohong Bao <bao@lindenlab.com> | 2013-11-26 17:44:54 -0700 | 
| commit | d8e92867162f8c4ff9489d8eefde53546e907dff (patch) | |
| tree | 4c67e73acfb0988213965f90bc9cc85ae114afbb | |
| parent | 04aece3282025ed0f117a9ade96edc0bf906b3cf (diff) | |
fix for SH-4637: Viewer-Interesting crashes if you teleport after crossing a region border.
| -rwxr-xr-x | indra/newview/llspatialpartition.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llvieweroctree.cpp | 6 | 
2 files changed, 9 insertions, 11 deletions
| diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 86d1948baa..7b894d8d98 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -840,9 +840,9 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node)  	{  		return;  	} -	setState(DEAD); -	 -	for (element_iter i = getDataBegin(); getElementCount() > 0 && i != getDataEnd();) +	setState(DEAD);	 + +	for (element_iter i = getDataBegin(); i != getDataEnd(); ++i)  	{  		LLViewerOctreeEntry* entry = *i; @@ -852,14 +852,6 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node)  			{  				((LLDrawable*)entry->getDrawable())->setGroup(NULL);  			} -			else -	{ -				LL_ERRS() << "No Drawable found in the entry." << LL_ENDL; -			} -		} -		else -		{ -			++i;  		}  	} diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 201677b3de..ff8f4d2434 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -481,6 +481,12 @@ bool LLViewerOctreeGroup::removeFromGroup(LLViewerOctreeEntry* entry)  {  	llassert(entry != NULL);  	llassert(!entry->getGroup()); +	 +	if(isDead()) //group is about to be destroyed, not need to double delete the entry. +	{ +		entry->setBinIndex(-1); +		return true; +	}  	unbound();  	setState(OBJECT_DIRTY); | 
