Fix thread-unsafe usage of LLPointer and LLMeshSkinInfo(#2755) (#2759)

meow-7.2.2
Rye Mutt 2024-10-01 19:01:36 -04:00 committed by Brad Linden
parent b4b52e4717
commit 74fe406916
1 changed files with 6 additions and 4 deletions

View File

@ -864,7 +864,7 @@ LLMeshRepoThread::~LLMeshRepoThread()
while (!mSkinInfoQ.empty())
{
delete mSkinInfoQ.front();
llassert(mSkinInfoQ.front()->getNumRefs() == 1);
mSkinInfoQ.pop_front();
}
@ -2058,13 +2058,15 @@ bool LLMeshRepoThread::skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 dat
LLSkinningUtil::initJointNums(info, gAgentAvatarp);
}
// remember the skin info in the background thread so we can use it
// copy the skin info for the background thread so we can use it
// to calculate per-joint bounding boxes when volumes are loaded
mSkinMap[mesh_id] = info;
mSkinMap[mesh_id] = new LLMeshSkinInfo(*info);
{
// Move the LLPointer in to the skin info queue to avoid reference
// count modification after we leave the lock
LLMutexLock lock(mMutex);
mSkinInfoQ.push_back(info);
mSkinInfoQ.emplace_back(std::move(info));
}
}