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 # // Read sequence #
OCTREE_PACKET_SEQUENCE completionNumber; OCTREE_PACKET_SEQUENCE completionNumber;
message->readPrimitive(&completionNumber); message->readPrimitive(&completionNumber);
Locker lock(_completionMutex);
_completionSequenceNumber = completionNumber; _completionSequenceNumber = completionNumber;
_completionSequenceNumberValid = true; _completionSequenceNumberValid = true;
} break; } break;
@ -126,6 +128,7 @@ void OctreePacketProcessor::processPacket(QSharedPointer<ReceivedMessage> messag
} }
void OctreePacketProcessor::resetCompletionSequenceNumber() { void OctreePacketProcessor::resetCompletionSequenceNumber() {
Locker lock(_completionMutex);
_completionSequenceNumber = false; _completionSequenceNumber = false;
} }
@ -140,7 +143,8 @@ namespace {
} }
bool OctreePacketProcessor::octreeSequenceIsComplete(int sequenceNumber) const { 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 && 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); void handleOctreePacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
private: private:
mutable std::mutex _completionMutex;
using Locker = std::lock_guard<std::mutex>;
bool _completionSequenceNumberValid { false }; bool _completionSequenceNumberValid { false };
std::atomic<int> _completionSequenceNumber { 0 }; int _completionSequenceNumber { 0 };
}; };
#endif // hifi_OctreePacketProcessor_h #endif // hifi_OctreePacketProcessor_h