diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 81a0523e..2873ace1 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -52,10 +52,7 @@ disconnect_observer ([]() {}) nano::network::~network () { - for (auto & thread : packet_processing_threads) - { - thread.join (); - } + stop (); } void nano::network::start () @@ -75,10 +72,17 @@ void nano::network::start () void nano::network::stop () { - udp_channels.stop (); - tcp_channels.stop (); - resolver.cancel (); - buffer_container.stop (); + if (!stopped.exchange (true)) + { + udp_channels.stop (); + tcp_channels.stop (); + resolver.cancel (); + buffer_container.stop (); + for (auto & thread : packet_processing_threads) + { + thread.join (); + } + } } void nano::network::send_keepalive (std::shared_ptr channel_a) diff --git a/nano/node/network.hpp b/nano/node/network.hpp index 6f4d08ad..da2850a1 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -161,6 +161,7 @@ public: std::function disconnect_observer; // Called when a new channel is observed std::function)> channel_observer; + std::atomic stopped{ false }; static unsigned const broadcast_interval_ms = 10; static size_t const buffer_size = 512; static size_t const confirm_req_hashes_max = 7;