Use locking for the OctreePacketProcessor additions

This commit is contained in:
Simon Walton 2018-07-27 14:51:24 -07:00
parent 3d390203e2
commit 5315b020ec
2 changed files with 9 additions and 3 deletions

View file

@ -115,6 +115,8 @@ void OctreePacketProcessor::processPacket(QSharedPointer<ReceivedMessage> messag
// Read sequence #
OCTREE_PACKET_SEQUENCE completionNumber;
message->readPrimitive(&completionNumber);
Locker lock(_completionMutex);
_completionSequenceNumber = completionNumber;
_completionSequenceNumberValid = true;
} break;
@ -126,6 +128,7 @@ void OctreePacketProcessor::processPacket(QSharedPointer<ReceivedMessage> messag
}
void OctreePacketProcessor::resetCompletionSequenceNumber() {
Locker lock(_completionMutex);
_completionSequenceNumber = false;
}
@ -140,7 +143,8 @@ namespace {
}
bool OctreePacketProcessor::octreeSequenceIsComplete(int sequenceNumber) const {
const int completionSequenceNumber = _completionSequenceNumber;
Locker lock(_completionMutex);
// If we've received the flagged seq # and the current one is >= it.
return _completionSequenceNumberValid &&
!lessThanWraparound<OCTREE_PACKET_SEQUENCE>(completionSequenceNumber, sequenceNumber);
!lessThanWraparound<OCTREE_PACKET_SEQUENCE>(_completionSequenceNumber, sequenceNumber);
}

View file

@ -37,8 +37,10 @@ private slots:
void handleOctreePacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
private:
mutable std::mutex _completionMutex;
using Locker = std::lock_guard<std::mutex>;
bool _completionSequenceNumberValid { false };
std::atomic<int> _completionSequenceNumber { 0 };
int _completionSequenceNumber { 0 };
};
#endif // hifi_OctreePacketProcessor_h