mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 16:36:54 +02:00
added locking on _singleSenderStats; untested!
This commit is contained in:
parent
15bd0878c4
commit
c542da9707
4 changed files with 17 additions and 9 deletions
|
@ -25,7 +25,9 @@ OctreeInboundPacketProcessor::OctreeInboundPacketProcessor(OctreeServer* myServe
|
||||||
_totalProcessTime(0),
|
_totalProcessTime(0),
|
||||||
_totalLockWaitTime(0),
|
_totalLockWaitTime(0),
|
||||||
_totalElementsInPacket(0),
|
_totalElementsInPacket(0),
|
||||||
_totalPackets(0)
|
_totalPackets(0),
|
||||||
|
_singleSenderStats(),
|
||||||
|
_singleSenderStatsLock()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +38,9 @@ void OctreeInboundPacketProcessor::resetStats() {
|
||||||
_totalElementsInPacket = 0;
|
_totalElementsInPacket = 0;
|
||||||
_totalPackets = 0;
|
_totalPackets = 0;
|
||||||
|
|
||||||
|
_singleSenderStatsLock.lockForWrite();
|
||||||
_singleSenderStats.clear();
|
_singleSenderStats.clear();
|
||||||
|
_singleSenderStatsLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,7 +147,9 @@ void OctreeInboundPacketProcessor::trackInboundPacket(const QUuid& nodeUUID, uns
|
||||||
if (_singleSenderStats.find(nodeUUID) == _singleSenderStats.end()) {
|
if (_singleSenderStats.find(nodeUUID) == _singleSenderStats.end()) {
|
||||||
SingleSenderStats stats;
|
SingleSenderStats stats;
|
||||||
stats.trackInboundPacket(sequence, transitTime, editsInPacket, processTime, lockWaitTime);
|
stats.trackInboundPacket(sequence, transitTime, editsInPacket, processTime, lockWaitTime);
|
||||||
|
_singleSenderStatsLock.lockForWrite();
|
||||||
_singleSenderStats[nodeUUID] = stats;
|
_singleSenderStats[nodeUUID] = stats;
|
||||||
|
_singleSenderStatsLock.unlock();
|
||||||
} else {
|
} else {
|
||||||
SingleSenderStats& stats = _singleSenderStats[nodeUUID];
|
SingleSenderStats& stats = _singleSenderStats[nodeUUID];
|
||||||
stats.trackInboundPacket(sequence, transitTime, editsInPacket, processTime, lockWaitTime);
|
stats.trackInboundPacket(sequence, transitTime, editsInPacket, processTime, lockWaitTime);
|
||||||
|
|
|
@ -71,6 +71,8 @@ public:
|
||||||
|
|
||||||
void resetStats();
|
void resetStats();
|
||||||
|
|
||||||
|
void lockSingleSenderStatsForRead() { _singleSenderStatsLock.lockForRead(); }
|
||||||
|
void unlockSingleSenderStats() { _singleSenderStatsLock.unlock(); }
|
||||||
NodeToSenderStatsMap& getSingleSenderStats() { return _singleSenderStats; }
|
NodeToSenderStatsMap& getSingleSenderStats() { return _singleSenderStats; }
|
||||||
const NodeToSenderStatsMap& getSingleSenderStats() const { return _singleSenderStats; }
|
const NodeToSenderStatsMap& getSingleSenderStats() const { return _singleSenderStats; }
|
||||||
|
|
||||||
|
@ -91,5 +93,6 @@ private:
|
||||||
quint64 _totalPackets;
|
quint64 _totalPackets;
|
||||||
|
|
||||||
NodeToSenderStatsMap _singleSenderStats;
|
NodeToSenderStatsMap _singleSenderStats;
|
||||||
|
QReadWriteLock _singleSenderStatsLock;
|
||||||
};
|
};
|
||||||
#endif // hifi_OctreeInboundPacketProcessor_h
|
#endif // hifi_OctreeInboundPacketProcessor_h
|
||||||
|
|
|
@ -120,7 +120,7 @@ int OctreeSendThread::sendNack(OctreeQueryNode* nodeData) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const OctreeInboundPacketProcessor* myServerPacketProcessor = _myServer->getInboundPacketProcessor();
|
OctreeInboundPacketProcessor* myServerPacketProcessor = _myServer->getInboundPacketProcessor();
|
||||||
|
|
||||||
// if there are packets from _node that are waiting to be processed,
|
// if there are packets from _node that are waiting to be processed,
|
||||||
// don't send a NACK since the missing packets may be among those waiting packets.
|
// don't send a NACK since the missing packets may be among those waiting packets.
|
||||||
|
@ -128,18 +128,15 @@ int OctreeSendThread::sendNack(OctreeQueryNode* nodeData) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// lock unlock required ????????? prolly: _singleSenderStats may have our node's entry deleted during this or something
|
myServerPacketProcessor->lockSingleSenderStatsForRead();
|
||||||
// maybe just make a copy instead!!
|
|
||||||
|
|
||||||
// lock
|
const QSet<unsigned short int>& missingSequenceNumbersFromNode = myServerPacketProcessor
|
||||||
|
|
||||||
const QSet<unsigned short int> missingSequenceNumbersFromNode = myServerPacketProcessor
|
|
||||||
->getSingleSenderStats().at(_node->getUUID()).getMissingSequenceNumbers();
|
->getSingleSenderStats().at(_node->getUUID()).getMissingSequenceNumbers();
|
||||||
|
|
||||||
// check if there are any sequence numbers that need to be nacked
|
// check if there are any sequence numbers that need to be nacked
|
||||||
int numSequenceNumbersAvailable = missingSequenceNumbersFromNode.size();
|
int numSequenceNumbersAvailable = missingSequenceNumbersFromNode.size();
|
||||||
if (numSequenceNumbersAvailable == 0) {
|
if (numSequenceNumbersAvailable == 0) {
|
||||||
//unlock
|
myServerPacketProcessor->unlockSingleSenderStats();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,6 +167,8 @@ int OctreeSendThread::sendNack(OctreeQueryNode* nodeData) {
|
||||||
dataAt += sizeof(unsigned short int);
|
dataAt += sizeof(unsigned short int);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
myServerPacketProcessor->unlockSingleSenderStats();
|
||||||
|
|
||||||
// send it
|
// send it
|
||||||
OctreeServer::didCallWriteDatagram(this);
|
OctreeServer::didCallWriteDatagram(this);
|
||||||
NodeList::getInstance()->writeDatagram((char*)packet, dataAt - packet, _node);
|
NodeList::getInstance()->writeDatagram((char*)packet, dataAt - packet, _node);
|
||||||
|
|
|
@ -52,7 +52,7 @@ public:
|
||||||
int getPacketsTotalPerInterval() const { return _packetsTotalPerInterval; }
|
int getPacketsTotalPerInterval() const { return _packetsTotalPerInterval; }
|
||||||
int getPacketsTotalPerSecond() const { return getPacketsTotalPerInterval() * INTERVALS_PER_SECOND; }
|
int getPacketsTotalPerSecond() const { return getPacketsTotalPerInterval() * INTERVALS_PER_SECOND; }
|
||||||
|
|
||||||
const OctreeInboundPacketProcessor* getInboundPacketProcessor() const { return _octreeInboundPacketProcessor; }
|
OctreeInboundPacketProcessor* getInboundPacketProcessor() { return _octreeInboundPacketProcessor; }
|
||||||
|
|
||||||
static int getCurrentClientCount() { return _clientCount; }
|
static int getCurrentClientCount() { return _clientCount; }
|
||||||
static void clientConnected() { _clientCount++; }
|
static void clientConnected() { _clientCount++; }
|
||||||
|
|
Loading…
Reference in a new issue