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;
}
_myServer->lockTree();
_myServer->getServerTree().readCodeColorBufferToTree(voxelData, destructive);
_myServer->unlockTree();
// skip to next voxel edit record in the packet
voxelData += voxelDataSize;

View file

@ -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<QUuid>::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();

View file

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