aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-12-03 11:20:48 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2016-12-03 11:20:48 +0000
commit7c0dd5e46c528d26987c7eed9e40a1996e4801cf (patch)
tree123625146ca90ffd00556e6f577bfbd74d70bf93 /src
parentMerge pull request #1372 (diff)
downloadmonero-7c0dd5e46c528d26987c7eed9e40a1996e4801cf.tar.xz
net_node: drop connections from banned IPs after looping through connections
This keeps the connections lock just for the time of looping and adding connectoins to a list, and the dropping happens after it. This should avoid lengthy delays waiting for the connections lock.
Diffstat (limited to 'src')
-rw-r--r--src/p2p/net_node.inl10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
index b5bfc2979..bf9251679 100644
--- a/src/p2p/net_node.inl
+++ b/src/p2p/net_node.inl
@@ -203,15 +203,17 @@ namespace nodetool
m_blocked_ips[addr] = time(nullptr) + seconds;
// drop any connection to that IP
- while (!m_net_server.get_config_object().foreach_connection([&](const p2p_connection_context& cntxt)
+ std::list<boost::uuids::uuid> conns;
+ m_net_server.get_config_object().foreach_connection([&](const p2p_connection_context& cntxt)
{
if (cntxt.m_remote_ip == addr)
{
- drop_connection(cntxt);
- return false;
+ conns.push_back(cntxt.m_connection_id);
}
return true;
- }));
+ });
+ for (const auto &c: conns)
+ m_net_server.get_config_object().close(c);
LOG_PRINT_CYAN("IP " << epee::string_tools::get_ip_string_from_int32(addr) << " blocked.", LOG_LEVEL_0);
return true;