mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-15 20:10:20 +02:00
Merge pull request #8859 from Atlante45/seq-num-race
Fix sequence number race condition
This commit is contained in:
commit
6109f41ae2
2 changed files with 15 additions and 2 deletions
|
@ -118,8 +118,14 @@ qint64 Socket::writeBasePacket(const udt::BasePacket& packet, const HifiSockAddr
|
|||
qint64 Socket::writePacket(const Packet& packet, const HifiSockAddr& sockAddr) {
|
||||
Q_ASSERT_X(!packet.isReliable(), "Socket::writePacket", "Cannot send a reliable packet unreliably");
|
||||
|
||||
SequenceNumber sequenceNumber;
|
||||
{
|
||||
Lock lock(_unreliableSequenceNumbersMutex);
|
||||
sequenceNumber = ++_unreliableSequenceNumbers[sockAddr];
|
||||
}
|
||||
|
||||
// write the correct sequence number to the Packet here
|
||||
packet.writeSequenceNumber(++_unreliableSequenceNumbers[sockAddr]);
|
||||
packet.writeSequenceNumber(sequenceNumber);
|
||||
|
||||
return writeDatagram(packet.getData(), packet.getDataSize(), sockAddr);
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include <functional>
|
||||
#include <unordered_map>
|
||||
#include <mutex>
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QTimer>
|
||||
|
@ -46,6 +47,10 @@ using MessageFailureHandler = std::function<void(HifiSockAddr, udt::Packet::Mess
|
|||
|
||||
class Socket : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
using Mutex = std::mutex;
|
||||
using Lock = std::unique_lock<Mutex>;
|
||||
|
||||
public:
|
||||
using StatsVector = std::vector<std::pair<HifiSockAddr, ConnectionStats::Stats>>;
|
||||
|
||||
|
@ -121,7 +126,9 @@ private:
|
|||
MessageHandler _messageHandler;
|
||||
MessageFailureHandler _messageFailureHandler;
|
||||
ConnectionCreationFilterOperator _connectionCreationFilterOperator;
|
||||
|
||||
|
||||
Mutex _unreliableSequenceNumbersMutex;
|
||||
|
||||
std::unordered_map<HifiSockAddr, BasePacketHandler> _unfilteredHandlers;
|
||||
std::unordered_map<HifiSockAddr, SequenceNumber> _unreliableSequenceNumbers;
|
||||
std::unordered_map<HifiSockAddr, std::unique_ptr<Connection>> _connectionsHash;
|
||||
|
|
Loading…
Reference in a new issue