From 2ba64e111509e2d3c77c2b860120856806f7648e Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Mon, 2 Apr 2018 10:46:38 -0700 Subject: [PATCH] LocalID - Use tbb hash map instead of std one for better concurrency --- libraries/networking/src/LimitedNodeList.cpp | 7 ++----- libraries/networking/src/LimitedNodeList.h | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index c30952c344..ec2e107567 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -696,7 +696,7 @@ SharedNodePointer LimitedNodeList::addOrUpdateNode(const QUuid& uuid, NodeType_t auto oldSoloNode = previousSoloIt->second; - _localIDMap.erase(oldSoloNode->getLocalID()); + _localIDMap.unsafe_erase(oldSoloNode->getLocalID()); _nodeHash.unsafe_erase(previousSoloIt); handleNodeKill(oldSoloNode); @@ -840,6 +840,7 @@ void LimitedNodeList::removeSilentNodes() { if (!node->isForcedNeverSilent() && (usecTimestampNow() - node->getLastHeardMicrostamp()) > (NODE_SILENCE_THRESHOLD_MSECS * USECS_PER_MSEC)) { // call the NodeHash erase to get rid of this node + _localIDMap.unsafe_erase(node->getLocalID()); it = _nodeHash.unsafe_erase(it); killedNodes.insert(node); @@ -852,10 +853,6 @@ void LimitedNodeList::removeSilentNodes() { }); foreach(const SharedNodePointer& killedNode, killedNodes) { - { - QWriteLocker writeLock { &_nodeMutex }; - _localIDMap.erase(killedNode->getLocalID()); - } handleNodeKill(killedNode); } } diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index 95d0e8b559..6c61fbc43c 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -431,7 +431,7 @@ private slots: private: mutable QReadWriteLock _sessionUUIDLock; QUuid _sessionUUID; - using LocalIDMapping = std::unordered_map; + using LocalIDMapping = tbb::concurrent_unordered_map; LocalIDMapping _localIDMap; Node::LocalID _sessionLocalID { 0 }; };