diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 6ca87fa4db..a6411c7937 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -279,10 +279,8 @@ void NodeList::clear() { // iterate the nodes in the list while (nodeItem != _nodeHash.end()) { - // emit our signal to say this node has been killed - emit nodeKilled(nodeItem.value()); - // erase the node from our node hash - _nodeHash.erase(nodeItem); + killNodeAtHashIterator(nodeItem); + nodeItem++; } } @@ -448,9 +446,11 @@ void NodeList::killNodeWithUUID(const QUuid& nodeUUID) { } } -void NodeList::killNodeAtHashIterator(NodeHash::iterator nodeItemToKill) { +NodeHash::iterator NodeList::killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill) { + qDebug() << "Killed" << *nodeItemToKill.value() << "\n"; emit nodeKilled(nodeItemToKill.value()); - _nodeHash.erase(nodeItemToKill); + + return _nodeHash.erase(nodeItemToKill); } @@ -789,6 +789,8 @@ void NodeList::removeSilentNodes() { NodeHash::iterator nodeItem = _nodeHash.begin(); + int index = 0; + while (nodeItem != _nodeHash.end()) { SharedNodePointer node = nodeItem.value(); @@ -797,10 +799,11 @@ 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) - killNodeAtHashIterator(nodeItem); + nodeItem = killNodeAtHashIterator(nodeItem); + } else { + // we didn't kill this node, push the iterator forwards + ++nodeItem; } - - nodeItem++; } } diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index 44fa4232db..21ed3533af 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -144,7 +144,7 @@ private: void processKillNode(unsigned char* packetData, size_t dataBytes); - void killNodeAtHashIterator(NodeHash::iterator nodeItemToKill); + NodeHash::iterator killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill); NodeHash _nodeHash; QString _domainHostname; diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index ec5e8ee692..2ed6608592 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -20,7 +20,7 @@ PACKET_VERSION versionForPacketType(PACKET_TYPE type) { return 2; case PACKET_TYPE_HEAD_DATA: - return 12; + return 13; case PACKET_TYPE_AVATAR_URLS: return 2;