From 07e925d279b6c52c0cf352173dfb81fd1740d651 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Thu, 9 Nov 2017 16:48:04 +0000
Subject: [PATCH] MAINT-7913, MAINT-7817 - fix for animesh attachment
 corruption after teleporting to a different simulator. Turns out the control
 avatar (skeleton) was getting caught up in the cleanup for the original
 region

---
 indra/newview/llcontrolavatar.cpp | 14 ++++++++++++++
 indra/newview/llviewerobject.cpp  |  5 +++++
 2 files changed, 19 insertions(+)

diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp
index 51dc7d7de1a..699c3ce1f91 100644
--- a/indra/newview/llcontrolavatar.cpp
+++ b/indra/newview/llcontrolavatar.cpp
@@ -32,6 +32,7 @@
 #include "llanimationstates.h"
 #include "llviewercontrol.h"
 #include "llmeshrepository.h"
+#include "llviewerregion.h"
 
 LLControlAvatar::LLControlAvatar(const LLUUID& id, const LLPCode pcode, LLViewerRegion* regionp) :
     LLVOAvatar(id, pcode, regionp),
@@ -275,6 +276,19 @@ void LLControlAvatar::updateDebugText()
                               total_linkset_count, animated_volume_count, active_string.c_str()));
         addDebugText(llformat("types %s lods %s", type_string.c_str(), lod_string.c_str()));
         addDebugText(llformat("tris %d verts %d", total_tris, total_verts));
+        std::string region_name = "no region";
+        if (mRootVolp->getRegion())
+        {
+            region_name = mRootVolp->getRegion()->getName();
+        }
+        std::string skel_region_name = "skel no region";
+        if (getRegion())
+        {
+            skel_region_name = getRegion()->getName();
+        }
+        addDebugText(llformat("region %x %s skel %x %s",
+                              mRootVolp->getRegion(), region_name.c_str(),
+                              getRegion(), skel_region_name.c_str()));
         //addDebugText(llformat("anim time %.1f (step %f factor %f)", 
         //                      mMotionController.getAnimTime(),
         //                      mMotionController.getTimeStep(), 
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 42f6b081e50..e49c37be5ef 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -6102,6 +6102,11 @@ void LLViewerObject::setRegion(LLViewerRegion *regionp)
 		child->setRegion(regionp);
 	}
 
+    if (mControlAvatar)
+    {
+        mControlAvatar->setRegion(regionp);
+    }
+
 	setChanged(MOVED | SILHOUETTE);
 	updateDrawable(FALSE);
 }
-- 
GitLab