mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 17:56:15 +02:00
more potential fixes for voxel server crashes
This commit is contained in:
parent
1b18b53cfd
commit
987ce16b10
3 changed files with 8 additions and 8 deletions
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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__
|
||||||
|
|
Loading…
Reference in a new issue