mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 12:14:00 +02:00
Remove deadlock caused by trying readlock on NodeList
Also just use refs to other SharedNodes as the NodeList is locked.
This commit is contained in:
parent
44f253c482
commit
027d117364
1 changed files with 9 additions and 5 deletions
|
@ -288,13 +288,19 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
|||
|
||||
// setup list of AvatarData as well as maps to map betweeen the AvatarData and the original nodes
|
||||
struct AvatarSortData {
|
||||
SharedNodePointer _nodeShared;
|
||||
AvatarSortData(const SharedNodePointer& nodeShared, AvatarData* avatarData, quint64 lastEncodeTime)
|
||||
: _nodeShared(nodeShared)
|
||||
, _node(nodeShared.data())
|
||||
, _avatarData(avatarData)
|
||||
, _lastEncodeTime(lastEncodeTime)
|
||||
{ }
|
||||
const SharedNodePointer& _nodeShared;
|
||||
Node* _node;
|
||||
AvatarData* _avatarData;
|
||||
quint64 _lastEncodeTime;
|
||||
};
|
||||
// Temporary info about the avatars we're sending:
|
||||
std::vector<AvatarSortData> avatarsToSort;
|
||||
avatarsToSort.reserve(nodeList->size());
|
||||
//std::unordered_map<const AvatarData*, Node*> avatarDataToNodes;
|
||||
//std::unordered_map<const AvatarData*, SharedNodePointer> avatarDataToNodesShared;
|
||||
//std::unordered_map<QUuid, uint64_t> avatarEncodeTimes;
|
||||
|
@ -311,7 +317,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
|||
//avatarDataToNodes[otherAvatar] = otherNode.data();
|
||||
//avatarDataToNodesShared[otherAvatar] = otherNode;
|
||||
auto lastEncodeTime = nodeData->getLastOtherAvatarEncodeTime(otherAvatar->getSessionUUID());
|
||||
avatarsToSort.emplace_back(AvatarSortData({ otherNode, otherNodeRaw, otherAvatar, lastEncodeTime }));
|
||||
avatarsToSort.emplace_back(AvatarSortData(otherNode, otherAvatar, lastEncodeTime));
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -345,7 +351,6 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
|||
AvatarData::_avatarSortCoefficientAge);
|
||||
|
||||
// ignore or sort
|
||||
const AvatarData* thisAvatar = nodeData->getAvatarSharedPointer().get();
|
||||
for (const auto& avatar : avatarsToSort) {
|
||||
if (avatar._node == nodeRaw) {
|
||||
// don't echo updates to self
|
||||
|
@ -437,7 +442,6 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
|||
int remainingAvatars = (int)sortedAvatars.size();
|
||||
auto traitsPacketList = NLPacketList::create(PacketType::BulkAvatarTraits, QByteArray(), true, true);
|
||||
while (!sortedAvatars.empty()) {
|
||||
const AvatarData* avatarData = sortedAvatars.top().getAvatar();
|
||||
const Node* otherNode = sortedAvatars.top().getNode();
|
||||
sortedAvatars.pop();
|
||||
remainingAvatars--;
|
||||
|
|
Loading…
Reference in a new issue