mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 14:37:46 +02:00
fix for infinite loop in OctreeeInboundPacketProcessor
This commit is contained in:
parent
7dbf29821a
commit
27227181f0
3 changed files with 10 additions and 5 deletions
|
@ -43,6 +43,7 @@ void OctreeInboundPacketProcessor::resetStats() {
|
||||||
_totalPackets = 0;
|
_totalPackets = 0;
|
||||||
_lastNackTime = usecTimestampNow();
|
_lastNackTime = usecTimestampNow();
|
||||||
|
|
||||||
|
QWriteLocker locker(&_senderStatsLock);
|
||||||
_singleSenderStats.clear();
|
_singleSenderStats.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,6 +221,8 @@ void OctreeInboundPacketProcessor::trackInboundPacket(const QUuid& nodeUUID, uns
|
||||||
_totalElementsInPacket += editsInPacket;
|
_totalElementsInPacket += editsInPacket;
|
||||||
_totalPackets++;
|
_totalPackets++;
|
||||||
|
|
||||||
|
QWriteLocker locker(&_senderStatsLock);
|
||||||
|
|
||||||
// find the individual senders stats and track them there too...
|
// find the individual senders stats and track them there too...
|
||||||
// see if this is the first we've heard of this node...
|
// see if this is the first we've heard of this node...
|
||||||
if (_singleSenderStats.find(nodeUUID) == _singleSenderStats.end()) {
|
if (_singleSenderStats.find(nodeUUID) == _singleSenderStats.end()) {
|
||||||
|
@ -242,6 +245,8 @@ int OctreeInboundPacketProcessor::sendNackPackets() {
|
||||||
int packetsSent = 0;
|
int packetsSent = 0;
|
||||||
int totalBytesSent = 0;
|
int totalBytesSent = 0;
|
||||||
|
|
||||||
|
QWriteLocker locker(&_senderStatsLock);
|
||||||
|
|
||||||
NodeToSenderStatsMapIterator i = _singleSenderStats.begin();
|
NodeToSenderStatsMapIterator i = _singleSenderStats.begin();
|
||||||
while (i != _singleSenderStats.end()) {
|
while (i != _singleSenderStats.end()) {
|
||||||
|
|
||||||
|
@ -262,10 +267,9 @@ int OctreeInboundPacketProcessor::sendNackPackets() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const SharedNodePointer& destinationNode = DependencyManager::get<NodeList>()->nodeWithUUID(nodeUUID);
|
const SharedNodePointer& destinationNode = DependencyManager::get<NodeList>()->nodeWithUUID(nodeUUID);
|
||||||
// If the node no longer exists, wait until the ReceivedPacketProcessor has cleaned up the node
|
// if the node no longer exists, remove its stats
|
||||||
// to remove it from our stats list.
|
|
||||||
// FIXME Is it safe to clean it up here before ReceivedPacketProcess has?
|
|
||||||
if (!destinationNode) {
|
if (!destinationNode) {
|
||||||
|
i = _singleSenderStats.erase(i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ public:
|
||||||
|
|
||||||
void resetStats();
|
void resetStats();
|
||||||
|
|
||||||
NodeToSenderStatsMap& getSingleSenderStats() { return _singleSenderStats; }
|
NodeToSenderStatsMap getSingleSenderStats() { QReadLocker locker(&_senderStatsLock); return _singleSenderStats; }
|
||||||
|
|
||||||
virtual void terminating() { _shuttingDown = true; ReceivedPacketProcessor::terminating(); }
|
virtual void terminating() { _shuttingDown = true; ReceivedPacketProcessor::terminating(); }
|
||||||
|
|
||||||
|
@ -101,6 +101,7 @@ private:
|
||||||
quint64 _totalPackets;
|
quint64 _totalPackets;
|
||||||
|
|
||||||
NodeToSenderStatsMap _singleSenderStats;
|
NodeToSenderStatsMap _singleSenderStats;
|
||||||
|
QReadWriteLock _senderStatsLock;
|
||||||
|
|
||||||
quint64 _lastNackTime;
|
quint64 _lastNackTime;
|
||||||
bool _shuttingDown;
|
bool _shuttingDown;
|
||||||
|
|
|
@ -711,7 +711,7 @@ bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
|
||||||
|
|
||||||
|
|
||||||
int senderNumber = 0;
|
int senderNumber = 0;
|
||||||
NodeToSenderStatsMap& allSenderStats = _octreeInboundPacketProcessor->getSingleSenderStats();
|
NodeToSenderStatsMap allSenderStats = _octreeInboundPacketProcessor->getSingleSenderStats();
|
||||||
for (NodeToSenderStatsMapConstIterator i = allSenderStats.begin(); i != allSenderStats.end(); i++) {
|
for (NodeToSenderStatsMapConstIterator i = allSenderStats.begin(); i != allSenderStats.end(); i++) {
|
||||||
senderNumber++;
|
senderNumber++;
|
||||||
QUuid senderID = i.key();
|
QUuid senderID = i.key();
|
||||||
|
|
Loading…
Reference in a new issue