From 987ce16b10f8b928d11072040a0dc230b27d3abe Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 6 Nov 2013 01:55:04 -0800 Subject: [PATCH] more potential fixes for voxel server crashes --- .../src/VoxelServerPacketProcessor.cpp | 2 ++ libraries/voxels/src/JurisdictionSender.cpp | 10 ++++------ libraries/voxels/src/JurisdictionSender.h | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/voxel-server-library/src/VoxelServerPacketProcessor.cpp b/libraries/voxel-server-library/src/VoxelServerPacketProcessor.cpp index fea179ca4d..4b3e870592 100644 --- a/libraries/voxel-server-library/src/VoxelServerPacketProcessor.cpp +++ b/libraries/voxel-server-library/src/VoxelServerPacketProcessor.cpp @@ -86,7 +86,9 @@ void VoxelServerPacketProcessor::processPacket(sockaddr& senderAddress, unsigned delete[] vertices; } + _myServer->lockTree(); _myServer->getServerTree().readCodeColorBufferToTree(voxelData, destructive); + _myServer->unlockTree(); // skip to next voxel edit record in the packet voxelData += voxelDataSize; diff --git a/libraries/voxels/src/JurisdictionSender.cpp b/libraries/voxels/src/JurisdictionSender.cpp index d00d09b9e9..3d3a3bec6f 100644 --- a/libraries/voxels/src/JurisdictionSender.cpp +++ b/libraries/voxels/src/JurisdictionSender.cpp @@ -35,7 +35,7 @@ void JurisdictionSender::processPacket(sockaddr& senderAddress, unsigned char* if (node) { QUuid nodeUUID = node->getUUID(); lockRequestingNodes(); - _nodesRequestingJurisdictions.insert(nodeUUID); + _nodesRequestingJurisdictions.push(nodeUUID); unlockRequestingNodes(); } } @@ -59,18 +59,16 @@ bool JurisdictionSender::process() { int nodeCount = 0; lockRequestingNodes(); - for (std::set::iterator nodeIterator = _nodesRequestingJurisdictions.begin(); - nodeIterator != _nodesRequestingJurisdictions.end(); nodeIterator++) { + while (!_nodesRequestingJurisdictions.empty()) { - QUuid nodeUUID = *nodeIterator; + QUuid nodeUUID = _nodesRequestingJurisdictions.front(); + _nodesRequestingJurisdictions.pop(); Node* node = NodeList::getInstance()->nodeWithUUID(nodeUUID); if (node->getActiveSocket() != NULL) { sockaddr* nodeAddress = node->getActiveSocket(); queuePacketForSending(*nodeAddress, bufferOut, sizeOut); nodeCount++; - // remove it from the set - _nodesRequestingJurisdictions.erase(nodeIterator); } } unlockRequestingNodes(); diff --git a/libraries/voxels/src/JurisdictionSender.h b/libraries/voxels/src/JurisdictionSender.h index 2cf3a6b932..f223621b87 100644 --- a/libraries/voxels/src/JurisdictionSender.h +++ b/libraries/voxels/src/JurisdictionSender.h @@ -11,7 +11,7 @@ #ifndef __shared__JurisdictionSender__ #define __shared__JurisdictionSender__ -#include +#include #include #include @@ -44,6 +44,6 @@ protected: private: pthread_mutex_t _requestingNodeMutex; JurisdictionMap* _jurisdictionMap; - std::set _nodesRequestingJurisdictions; + std::queue _nodesRequestingJurisdictions; }; #endif // __shared__JurisdictionSender__