summaryrefslogtreecommitdiff
path: root/node/MulticastTopology.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/MulticastTopology.hpp')
-rw-r--r--node/MulticastTopology.hpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/node/MulticastTopology.hpp b/node/MulticastTopology.hpp
index 276f1a29..17013fc1 100644
--- a/node/MulticastTopology.hpp
+++ b/node/MulticastTopology.hpp
@@ -38,6 +38,7 @@
#include "Address.hpp"
#include "MulticastGroup.hpp"
#include "Utils.hpp"
+#include "Mutex.hpp"
namespace ZeroTier {
@@ -45,8 +46,6 @@ class Topology;
/**
* Database of known multicast peers within a network
- *
- * This structure is not guarded by a mutex; the caller must synchronize access.
*/
class MulticastTopology
{
@@ -100,6 +99,7 @@ public:
*/
inline std::pair<uint64_t,unsigned int> groupStatus(const MulticastGroup &mg) const
{
+ Mutex::Lock _l(_groups_m);
std::map< MulticastGroup,MulticastGroupStatus >::const_iterator r(_groups.find(mg));
return ((r != _groups.end()) ? std::pair<uint64_t,unsigned int>(r->second.lastGatheredMembers,r->second.members.size()) : std::pair<uint64_t,unsigned int>(0,0));
}
@@ -122,6 +122,7 @@ public:
*/
inline void gatheringMembersNow(const MulticastGroup &mg,uint64_t now)
{
+ Mutex::Lock _l(_groups_m);
_groups[mg].lastGatheredMembers = now;
}
@@ -136,6 +137,7 @@ public:
private:
std::map< MulticastGroup,MulticastGroupStatus > _groups;
+ Mutex _groups_m;
};
} // namespace ZeroTier