From 9b894456e9a6bdd76c7f6866eb16b791417747ad Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 27 Jun 2019 17:29:17 -0700 Subject: [PATCH] Change address for sequence-number hash also --- libraries/networking/src/udt/Socket.cpp | 30 ++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index 94628aa852..e8fe3741aa 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -539,15 +539,29 @@ void Socket::handleStateChanged(QAbstractSocket::SocketState socketState) { } void Socket::handleRemoteAddressChange(HifiSockAddr previousAddress, HifiSockAddr currentAddress) { - Lock connectionsLock(_connectionsHashMutex); - _connectionsHash.erase(currentAddress); + { + Lock connectionsLock(_connectionsHashMutex); + _connectionsHash.erase(currentAddress); - const auto connectionIter = _connectionsHash.find(currentAddress); - if (connectionIter != _connectionsHash.end()) { - auto connection = std::move(connectionIter->second); - _connectionsHash.erase(connectionIter); - connection->setDestinationAddress(currentAddress); - _connectionsHash[currentAddress] = std::move(connection); + const auto connectionIter = _connectionsHash.find(previousAddress); + if (connectionIter != _connectionsHash.end()) { + auto connection = std::move(connectionIter->second); + _connectionsHash.erase(connectionIter); + connection->setDestinationAddress(currentAddress); + _connectionsHash[currentAddress] = std::move(connection); + } + } + + { + Lock sequenceNumbersLock(_unreliableSequenceNumbersMutex); + _unreliableSequenceNumbers.erase(currentAddress); + + const auto sequenceNumbersIter = _unreliableSequenceNumbers.find(previousAddress); + if (sequenceNumbersIter != _unreliableSequenceNumbers.end()) { + auto sequenceNumbers = sequenceNumbersIter->second; + _unreliableSequenceNumbers.erase(sequenceNumbersIter); + _unreliableSequenceNumbers[currentAddress] = sequenceNumbers; + } } }