mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 19:41:20 +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
|
// setup list of AvatarData as well as maps to map betweeen the AvatarData and the original nodes
|
||||||
struct AvatarSortData {
|
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;
|
Node* _node;
|
||||||
AvatarData* _avatarData;
|
AvatarData* _avatarData;
|
||||||
quint64 _lastEncodeTime;
|
quint64 _lastEncodeTime;
|
||||||
};
|
};
|
||||||
|
// Temporary info about the avatars we're sending:
|
||||||
std::vector<AvatarSortData> avatarsToSort;
|
std::vector<AvatarSortData> avatarsToSort;
|
||||||
avatarsToSort.reserve(nodeList->size());
|
|
||||||
//std::unordered_map<const AvatarData*, Node*> avatarDataToNodes;
|
//std::unordered_map<const AvatarData*, Node*> avatarDataToNodes;
|
||||||
//std::unordered_map<const AvatarData*, SharedNodePointer> avatarDataToNodesShared;
|
//std::unordered_map<const AvatarData*, SharedNodePointer> avatarDataToNodesShared;
|
||||||
//std::unordered_map<QUuid, uint64_t> avatarEncodeTimes;
|
//std::unordered_map<QUuid, uint64_t> avatarEncodeTimes;
|
||||||
|
@ -311,7 +317,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
//avatarDataToNodes[otherAvatar] = otherNode.data();
|
//avatarDataToNodes[otherAvatar] = otherNode.data();
|
||||||
//avatarDataToNodesShared[otherAvatar] = otherNode;
|
//avatarDataToNodesShared[otherAvatar] = otherNode;
|
||||||
auto lastEncodeTime = nodeData->getLastOtherAvatarEncodeTime(otherAvatar->getSessionUUID());
|
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);
|
AvatarData::_avatarSortCoefficientAge);
|
||||||
|
|
||||||
// ignore or sort
|
// ignore or sort
|
||||||
const AvatarData* thisAvatar = nodeData->getAvatarSharedPointer().get();
|
|
||||||
for (const auto& avatar : avatarsToSort) {
|
for (const auto& avatar : avatarsToSort) {
|
||||||
if (avatar._node == nodeRaw) {
|
if (avatar._node == nodeRaw) {
|
||||||
// don't echo updates to self
|
// don't echo updates to self
|
||||||
|
@ -437,7 +442,6 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
int remainingAvatars = (int)sortedAvatars.size();
|
int remainingAvatars = (int)sortedAvatars.size();
|
||||||
auto traitsPacketList = NLPacketList::create(PacketType::BulkAvatarTraits, QByteArray(), true, true);
|
auto traitsPacketList = NLPacketList::create(PacketType::BulkAvatarTraits, QByteArray(), true, true);
|
||||||
while (!sortedAvatars.empty()) {
|
while (!sortedAvatars.empty()) {
|
||||||
const AvatarData* avatarData = sortedAvatars.top().getAvatar();
|
|
||||||
const Node* otherNode = sortedAvatars.top().getNode();
|
const Node* otherNode = sortedAvatars.top().getNode();
|
||||||
sortedAvatars.pop();
|
sortedAvatars.pop();
|
||||||
remainingAvatars--;
|
remainingAvatars--;
|
||||||
|
|
Loading…
Reference in a new issue