mirror of
https://github.com/lubosz/overte.git
synced 2025-04-24 18:23:22 +02:00
edit nacks seem to be working;
added mutex for releaseQueuedPacket() to prevent duplicate packets being queued up due to the steps of queueing the packet and clearing it not being atomic.
This commit is contained in:
parent
06f8464ec9
commit
dc71f87ea4
4 changed files with 29 additions and 7 deletions
|
@ -282,7 +282,7 @@ SingleSenderStats::SingleSenderStats()
|
|||
void SingleSenderStats::trackInboundPacket(unsigned short int incomingSequence, quint64 transitTime,
|
||||
int editsInPacket, quint64 processTime, quint64 lockWaitTime) {
|
||||
|
||||
printf("\t\t tracked seq %d\n", incomingSequence);
|
||||
printf("\t\t tracked seq %hu\n", incomingSequence);
|
||||
|
||||
const int UINT16_RANGE = UINT16_MAX + 1;
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ SentPacketHistory::SentPacketHistory(int size)
|
|||
void SentPacketHistory::packetSent(uint16_t sequenceNumber, const QByteArray& packet) {
|
||||
|
||||
if (sequenceNumber != 0 && sequenceNumber != _newestSequenceNumber + 1) {
|
||||
printf("\t packet history received unexpected seq number! prev: %d received: %d\n", _newestSequenceNumber, sequenceNumber);
|
||||
printf("\t\tpacket history received unexpected seq number! prev: %hu received: %hu **************** \n", _newestSequenceNumber, sequenceNumber);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -104,12 +104,28 @@ void OctreeEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, const unsi
|
|||
|
||||
// extract sequence number and add packet to history
|
||||
int numBytesPacketHeader = numBytesForPacketHeader(packet);
|
||||
const char* dataAt = reinterpret_cast<const char*>(packet.data());
|
||||
unsigned short int sequence = (*((unsigned short int*)(dataAt + numBytesPacketHeader)));
|
||||
const char* dataAt = reinterpret_cast<const char*>(packet.data()) + numBytesPacketHeader;
|
||||
unsigned short int sequence = *((unsigned short int*)dataAt);
|
||||
/*
|
||||
// debug
|
||||
dataAt += sizeof(unsigned short int);
|
||||
|
||||
// extract time stamp
|
||||
quint64 sentTime = *((quint64*)dataAt);
|
||||
dataAt += sizeof(quint64);
|
||||
|
||||
PacketType type = packetTypeForPacket(packet);
|
||||
|
||||
|
||||
printf("adding packet to history. size: %d\n", packet.length());
|
||||
printf("type: %d, seq: %hu, time: %llu\n", (unsigned char)type, sequence, sentTime);
|
||||
printf("destination node: %s\n", nodeUUID.toString().toLatin1().data());
|
||||
fflush(stdout);
|
||||
*/
|
||||
_sentPacketHistories[nodeUUID].packetSent(sequence, packet);
|
||||
|
||||
if (!send) {
|
||||
printf("\t\t dropped packet %d !!!\n", sequence);
|
||||
printf("\t dropped packet %d !!! ---------------------------\n", sequence);
|
||||
}
|
||||
|
||||
// debugging output...
|
||||
|
@ -307,11 +323,15 @@ void OctreeEditPacketSender::releaseQueuedMessages() {
|
|||
}
|
||||
|
||||
void OctreeEditPacketSender::releaseQueuedPacket(EditPacketBuffer& packetBuffer) {
|
||||
_releaseQueuedPacketMutex.lock();
|
||||
|
||||
if (packetBuffer._currentSize > 0 && packetBuffer._currentType != PacketTypeUnknown) {
|
||||
queuePacketToNode(packetBuffer._nodeUUID, &packetBuffer._currentBuffer[0], packetBuffer._currentSize);
|
||||
packetBuffer._currentSize = 0;
|
||||
packetBuffer._currentType = PacketTypeUnknown;
|
||||
}
|
||||
packetBuffer._currentSize = 0;
|
||||
packetBuffer._currentType = PacketTypeUnknown;
|
||||
|
||||
_releaseQueuedPacketMutex.unlock();
|
||||
}
|
||||
|
||||
void OctreeEditPacketSender::initializePacket(EditPacketBuffer& packetBuffer, PacketType type) {
|
||||
|
|
|
@ -122,5 +122,7 @@ protected:
|
|||
|
||||
// TODO: garbage-collect this and _pendingEditPackets
|
||||
QHash<QUuid, SentPacketHistory> _sentPacketHistories;
|
||||
|
||||
QMutex _releaseQueuedPacketMutex;
|
||||
};
|
||||
#endif // hifi_OctreeEditPacketSender_h
|
||||
|
|
Loading…
Reference in a new issue