diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2024-02-21 00:31:08 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> | 2024-02-21 05:23:36 +0200 | 
| commit | 5e697cc04c0dd876e2484dbe49e32ddd7a711b3d (patch) | |
| tree | 51d72868eef866fbb49aa505ad1efa660f5749ec | |
| parent | 54dfcd7502a0f4cc6d14ac5fec026dcc9c498eaa (diff) | |
SL-20469 Crash at dead mRootVolp in getAttachedAvatar()
| -rw-r--r-- | indra/newview/llcontrolavatar.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 6 | 
2 files changed, 10 insertions, 2 deletions
| diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp index 50b9af668b..d764f64c79 100644 --- a/indra/newview/llcontrolavatar.cpp +++ b/indra/newview/llcontrolavatar.cpp @@ -99,7 +99,6 @@ LLVOAvatar *LLControlAvatar::getAttachedAvatar()  void LLControlAvatar::getNewConstraintFixups(LLVector3& new_pos_fixup, F32& new_scale_fixup) const  { -      F32 max_legal_offset = MAX_LEGAL_OFFSET;      if (gSavedSettings.getControl("AnimatedObjectsMaxLegalOffset"))      { @@ -362,6 +361,9 @@ LLControlAvatar *LLControlAvatar::createControlAvatar(LLVOVolume *obj)  void LLControlAvatar::markForDeath()  {      mMarkedForDeath = true; +    // object unlinked cav and might be dead already +    // might need to clean mControlAVBridge here as well +    mRootVolp = NULL;  }  void LLControlAvatar::idleUpdate(LLAgent &agent, const F64 &time) @@ -440,7 +442,7 @@ void LLControlAvatar::updateDebugText()          F32 streaming_cost = 0.f;          std::string cam_dist_string = "";          S32 cam_dist_count = 0; -        F32 lod_radius = mRootVolp->mLODRadius; +        F32 lod_radius = mRootVolp ? mRootVolp->mLODRadius : 0.f;          for (std::vector<LLVOVolume*>::iterator it = volumes.begin();               it != volumes.end(); ++it) diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index d46339e2fd..fc055a7303 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -392,6 +392,12 @@ LLViewerObject::~LLViewerObject()  	sNumZombieObjects--;  	llassert(mChildList.size() == 0);      llassert(mControlAvatar.isNull()); // Should have been cleaned by now +    if (mControlAvatar.notNull()) +    { +        mControlAvatar->markForDeath(); +        mControlAvatar = NULL; +        LL_WARNS() << "Dead object owned a live control avatar" << LL_ENDL; +    }  	clearInventoryListeners();  } | 
