From efc7311893b0fb25129eb2b715992ba2ac43d65c Mon Sep 17 00:00:00 2001 From: dec05eba <0xdec05eba@gmail.com> Date: Sun, 14 Oct 2018 06:05:09 +0200 Subject: Removed user from subscriptions on disconnect --- src/BootstrapNode.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/BootstrapNode.cpp') diff --git a/src/BootstrapNode.cpp b/src/BootstrapNode.cpp index e62e48d..273abf0 100644 --- a/src/BootstrapNode.cpp +++ b/src/BootstrapNode.cpp @@ -17,6 +17,21 @@ namespace sibs connections(27130), socket(connections.createSocket(address, false, true)) { + connections.onRemoveDisconnectedPeer([this](std::shared_ptr peer) + { + std::lock_guard lock(subscribedPeersMutex); + for(auto &topicUsers : subscribedPeers) + { + for(auto it = topicUsers.second.begin(); it != topicUsers.second.end(); ) + { + if(peer->address == (*it)->address) + it = topicUsers.second.erase(it); + else + ++it; + } + } + }); + if(UDT::listen(socket, 10) == UDT::ERROR) { std::string errMsg = "UDT: Failed to listen, error: "; @@ -75,6 +90,7 @@ namespace sibs PubsubKey pubsubKey; deserializer.extract(pubsubKey.data.data(), PUBSUB_KEY_LENGTH); + std::lock_guard lock(subscribedPeersMutex); auto &peers = subscribedPeers[pubsubKey]; for(auto &peer : peers) { -- cgit v1.2.3