fix for SH-369: [PUBLIC-JIRA-USERS] [crashhunters] LLVOAvatar::updateImpostors crash
parent
fe1f59b8b8
commit
60867888ba
|
|
@ -38,7 +38,7 @@
|
|||
LLStringTable LLCharacter::sVisualParamNames(1024);
|
||||
|
||||
std::vector< LLCharacter* > LLCharacter::sInstances;
|
||||
|
||||
BOOL LLCharacter::sAllowInstancesChange = TRUE ;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLCharacter()
|
||||
|
|
@ -51,8 +51,10 @@ LLCharacter::LLCharacter()
|
|||
mAppearanceSerialNum( 0 ),
|
||||
mSkeletonSerialNum( 0 )
|
||||
{
|
||||
mMotionController.setCharacter( this );
|
||||
llassert_always(sAllowInstancesChange) ;
|
||||
sInstances.push_back(this);
|
||||
|
||||
mMotionController.setCharacter( this );
|
||||
mPauseRequest = new LLPauseRequestHandle();
|
||||
}
|
||||
|
||||
|
|
@ -62,18 +64,29 @@ LLCharacter::LLCharacter()
|
|||
// Class Destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
LLCharacter::~LLCharacter()
|
||||
{
|
||||
{
|
||||
for (LLVisualParam *param = getFirstVisualParam();
|
||||
param;
|
||||
param = getNextVisualParam())
|
||||
{
|
||||
delete param;
|
||||
}
|
||||
std::vector<LLCharacter*>::iterator iter = std::find(sInstances.begin(), sInstances.end(), this);
|
||||
if (iter != sInstances.end())
|
||||
|
||||
U32 i ;
|
||||
U32 size = sInstances.size() ;
|
||||
for(i = 0 ; i < size ; i++)
|
||||
{
|
||||
sInstances.erase(iter);
|
||||
if(sInstances[i] == this)
|
||||
{
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
llassert_always(i < size) ;
|
||||
|
||||
llassert_always(sAllowInstancesChange) ;
|
||||
sInstances[i] = sInstances[size - 1] ;
|
||||
sInstances.pop_back() ;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -266,6 +266,7 @@ public:
|
|||
void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; }
|
||||
|
||||
static std::vector< LLCharacter* > sInstances;
|
||||
static BOOL sAllowInstancesChange ; //debug use
|
||||
|
||||
protected:
|
||||
LLMotionController mMotionController;
|
||||
|
|
|
|||
|
|
@ -8242,6 +8242,8 @@ U32 LLVOAvatar::getPartitionType() const
|
|||
//static
|
||||
void LLVOAvatar::updateImpostors()
|
||||
{
|
||||
LLCharacter::sAllowInstancesChange = FALSE ;
|
||||
|
||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{
|
||||
|
|
@ -8251,6 +8253,8 @@ void LLVOAvatar::updateImpostors()
|
|||
gPipeline.generateImpostor(avatar);
|
||||
}
|
||||
}
|
||||
|
||||
LLCharacter::sAllowInstancesChange = TRUE ;
|
||||
}
|
||||
|
||||
BOOL LLVOAvatar::isImpostor() const
|
||||
|
|
|
|||
Loading…
Reference in New Issue