diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 6b5a4923f8..ca89d3998f 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -55,7 +55,8 @@ void Agent::run() { // XXXBHG - this seems less than ideal. There might be classes (like jurisdiction listeners, that need access to // other node types, but for them to get access to those node types, we have to add them here. It seems like // NodeList should support adding types of interest - const NODE_TYPE AGENT_NODE_TYPES_OF_INTEREST[] = { NODE_TYPE_VOXEL_SERVER, NODE_TYPE_PARTICLE_SERVER }; + const NODE_TYPE AGENT_NODE_TYPES_OF_INTEREST[] = { NODE_TYPE_VOXEL_SERVER, NODE_TYPE_PARTICLE_SERVER, + NODE_TYPE_AUDIO_MIXER }; nodeList->setNodeTypesOfInterest(AGENT_NODE_TYPES_OF_INTEREST, sizeof(AGENT_NODE_TYPES_OF_INTEREST)); diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index a85a258e7f..736c94dfed 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -288,7 +288,9 @@ void NodeList::clear() { // iterate the nodes in the list while (nodeItem != _nodeHash.end()) { - nodeItem = killNodeAtHashIterator(nodeItem); + NodeHash::iterator previousNodeItem = nodeItem; + ++nodeItem; + killNodeAtHashIterator(previousNodeItem); } } @@ -454,14 +456,12 @@ void NodeList::killNodeWithUUID(const QUuid& nodeUUID) { } } -NodeHash::iterator NodeList::killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill) { +void NodeList::killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill) { qDebug() << "Killed" << *nodeItemToKill.value(); emit nodeKilled(nodeItemToKill.value()); - - return _nodeHash.erase(nodeItemToKill); + _nodeHash.erase(nodeItemToKill); } - void NodeList::sendKillNode(const char* nodeTypes, int numNodeTypes) { unsigned char packet[MAX_PACKET_SIZE]; unsigned char* packetPosition = packet; @@ -803,7 +803,10 @@ void NodeList::removeSilentNodes() { if ((usecTimestampNow() - node->getLastHeardMicrostamp()) > NODE_SILENCE_THRESHOLD_USECS) { // call our private method to kill this node (removes it and emits the right signal) - nodeItem = killNodeAtHashIterator(nodeItem); + NodeHash::iterator previousNodeItem = nodeItem; + ++nodeItem; + + killNodeAtHashIterator(previousNodeItem); } else { // we didn't kill this node, push the iterator forwards ++nodeItem; diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index 556e6fde95..db19732000 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -136,7 +136,7 @@ private: void processSTUNResponse(unsigned char* packetData, size_t dataBytes); void processKillNode(unsigned char* packetData, size_t dataBytes); - NodeHash::iterator killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill); + void killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill); NodeHash _nodeHash; QString _domainHostname;