Merge pull request #2219
04ebfbfe
p2p: close connections when exiting (moneromooo-monero)9a10148c
p2p: fix thread leak (moneromooo-monero)
This commit is contained in:
commit
43c6e452fa
@ -444,11 +444,11 @@ namespace nodetool
|
|||||||
std::vector<std::vector<std::string>> dns_results;
|
std::vector<std::vector<std::string>> dns_results;
|
||||||
dns_results.resize(m_seed_nodes_list.size());
|
dns_results.resize(m_seed_nodes_list.size());
|
||||||
|
|
||||||
std::list<boost::thread*> dns_threads;
|
std::list<boost::thread> dns_threads;
|
||||||
uint64_t result_index = 0;
|
uint64_t result_index = 0;
|
||||||
for (const std::string& addr_str : m_seed_nodes_list)
|
for (const std::string& addr_str : m_seed_nodes_list)
|
||||||
{
|
{
|
||||||
boost::thread* th = new boost::thread([=, &dns_results, &addr_str]
|
boost::thread th = boost::thread([=, &dns_results, &addr_str]
|
||||||
{
|
{
|
||||||
MDEBUG("dns_threads[" << result_index << "] created for: " << addr_str);
|
MDEBUG("dns_threads[" << result_index << "] created for: " << addr_str);
|
||||||
// TODO: care about dnssec avail/valid
|
// TODO: care about dnssec avail/valid
|
||||||
@ -474,19 +474,19 @@ namespace nodetool
|
|||||||
dns_results[result_index] = addr_list;
|
dns_results[result_index] = addr_list;
|
||||||
});
|
});
|
||||||
|
|
||||||
dns_threads.push_back(th);
|
dns_threads.push_back(std::move(th));
|
||||||
++result_index;
|
++result_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
MDEBUG("dns_threads created, now waiting for completion or timeout of " << CRYPTONOTE_DNS_TIMEOUT_MS << "ms");
|
MDEBUG("dns_threads created, now waiting for completion or timeout of " << CRYPTONOTE_DNS_TIMEOUT_MS << "ms");
|
||||||
boost::chrono::system_clock::time_point deadline = boost::chrono::system_clock::now() + boost::chrono::milliseconds(CRYPTONOTE_DNS_TIMEOUT_MS);
|
boost::chrono::system_clock::time_point deadline = boost::chrono::system_clock::now() + boost::chrono::milliseconds(CRYPTONOTE_DNS_TIMEOUT_MS);
|
||||||
uint64_t i = 0;
|
uint64_t i = 0;
|
||||||
for (boost::thread* th : dns_threads)
|
for (boost::thread& th : dns_threads)
|
||||||
{
|
{
|
||||||
if (! th->try_join_until(deadline))
|
if (! th.try_join_until(deadline))
|
||||||
{
|
{
|
||||||
MWARNING("dns_threads[" << i << "] timed out, sending interrupt");
|
MWARNING("dns_threads[" << i << "] timed out, sending interrupt");
|
||||||
th->interrupt();
|
th.interrupt();
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@ -714,6 +714,14 @@ namespace nodetool
|
|||||||
template<class t_payload_net_handler>
|
template<class t_payload_net_handler>
|
||||||
bool node_server<t_payload_net_handler>::send_stop_signal()
|
bool node_server<t_payload_net_handler>::send_stop_signal()
|
||||||
{
|
{
|
||||||
|
std::list<boost::uuids::uuid> connection_ids;
|
||||||
|
m_net_server.get_config_object().foreach_connection([&](const p2p_connection_context& cntxt) {
|
||||||
|
connection_ids.push_back(cntxt.m_connection_id);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
for (const auto &connection_id: connection_ids)
|
||||||
|
m_net_server.get_config_object().close(connection_id);
|
||||||
|
|
||||||
m_payload_handler.stop();
|
m_payload_handler.stop();
|
||||||
m_net_server.send_stop_signal();
|
m_net_server.send_stop_signal();
|
||||||
MDEBUG("[node] Stop signal sent");
|
MDEBUG("[node] Stop signal sent");
|
||||||
|
Loading…
Reference in New Issue
Block a user