more potential fixes for voxel server crashes

This commit is contained in:
ZappoMan 2013-11-06 01:55:04 -08:00
parent 1b18b53cfd
commit 987ce16b10
3 changed files with 8 additions and 8 deletions

View file

@ -86,7 +86,9 @@ void VoxelServerPacketProcessor::processPacket(sockaddr& senderAddress, unsigned
delete[] vertices; delete[] vertices;
} }
_myServer->lockTree();
_myServer->getServerTree().readCodeColorBufferToTree(voxelData, destructive); _myServer->getServerTree().readCodeColorBufferToTree(voxelData, destructive);
_myServer->unlockTree();
// skip to next voxel edit record in the packet // skip to next voxel edit record in the packet
voxelData += voxelDataSize; voxelData += voxelDataSize;

View file

@ -35,7 +35,7 @@ void JurisdictionSender::processPacket(sockaddr& senderAddress, unsigned char*
if (node) { if (node) {
QUuid nodeUUID = node->getUUID(); QUuid nodeUUID = node->getUUID();
lockRequestingNodes(); lockRequestingNodes();
_nodesRequestingJurisdictions.insert(nodeUUID); _nodesRequestingJurisdictions.push(nodeUUID);
unlockRequestingNodes(); unlockRequestingNodes();
} }
} }
@ -59,18 +59,16 @@ bool JurisdictionSender::process() {
int nodeCount = 0; int nodeCount = 0;
lockRequestingNodes(); lockRequestingNodes();
for (std::set<QUuid>::iterator nodeIterator = _nodesRequestingJurisdictions.begin(); while (!_nodesRequestingJurisdictions.empty()) {
nodeIterator != _nodesRequestingJurisdictions.end(); nodeIterator++) {
QUuid nodeUUID = *nodeIterator; QUuid nodeUUID = _nodesRequestingJurisdictions.front();
_nodesRequestingJurisdictions.pop();
Node* node = NodeList::getInstance()->nodeWithUUID(nodeUUID); Node* node = NodeList::getInstance()->nodeWithUUID(nodeUUID);
if (node->getActiveSocket() != NULL) { if (node->getActiveSocket() != NULL) {
sockaddr* nodeAddress = node->getActiveSocket(); sockaddr* nodeAddress = node->getActiveSocket();
queuePacketForSending(*nodeAddress, bufferOut, sizeOut); queuePacketForSending(*nodeAddress, bufferOut, sizeOut);
nodeCount++; nodeCount++;
// remove it from the set
_nodesRequestingJurisdictions.erase(nodeIterator);
} }
} }
unlockRequestingNodes(); unlockRequestingNodes();

View file

@ -11,7 +11,7 @@
#ifndef __shared__JurisdictionSender__ #ifndef __shared__JurisdictionSender__
#define __shared__JurisdictionSender__ #define __shared__JurisdictionSender__
#include <set> #include <queue>
#include <PacketSender.h> #include <PacketSender.h>
#include <ReceivedPacketProcessor.h> #include <ReceivedPacketProcessor.h>
@ -44,6 +44,6 @@ protected:
private: private:
pthread_mutex_t _requestingNodeMutex; pthread_mutex_t _requestingNodeMutex;
JurisdictionMap* _jurisdictionMap; JurisdictionMap* _jurisdictionMap;
std::set<QUuid> _nodesRequestingJurisdictions; std::queue<QUuid> _nodesRequestingJurisdictions;
}; };
#endif // __shared__JurisdictionSender__ #endif // __shared__JurisdictionSender__