diff --git a/nano/node/bootstrap.cpp b/nano/node/bootstrap.cpp index e596428c..33066e4c 100644 --- a/nano/node/bootstrap.cpp +++ b/nano/node/bootstrap.cpp @@ -38,23 +38,29 @@ void nano::socket::async_read (std::shared_ptr> buffer_a, s { assert (size_a <= buffer_a->size ()); auto this_l (shared_from_this ()); - start (); - boost::asio::async_read (socket_m, boost::asio::buffer (buffer_a->data (), size_a), [this_l, callback_a](boost::system::error_code const & ec, size_t size_a) { - this_l->node->stats.add (nano::stat::type::traffic_bootstrap, nano::stat::dir::in, size_a); - this_l->stop (); - callback_a (ec, size_a); - }); + if (socket_m.is_open ()) + { + start (); + boost::asio::async_read (socket_m, boost::asio::buffer (buffer_a->data (), size_a), [this_l, callback_a](boost::system::error_code const & ec, size_t size_a) { + this_l->node->stats.add (nano::stat::type::traffic_bootstrap, nano::stat::dir::in, size_a); + this_l->stop (); + callback_a (ec, size_a); + }); + } } void nano::socket::async_write (std::shared_ptr> buffer_a, std::function callback_a) { auto this_l (shared_from_this ()); - start (); - boost::asio::async_write (socket_m, boost::asio::buffer (buffer_a->data (), buffer_a->size ()), [this_l, callback_a, buffer_a](boost::system::error_code const & ec, size_t size_a) { - this_l->node->stats.add (nano::stat::type::traffic_bootstrap, nano::stat::dir::out, size_a); - this_l->stop (); - callback_a (ec, size_a); - }); + if (socket_m.is_open ()) + { + start (); + boost::asio::async_write (socket_m, boost::asio::buffer (buffer_a->data (), buffer_a->size ()), [this_l, callback_a, buffer_a](boost::system::error_code const & ec, size_t size_a) { + this_l->node->stats.add (nano::stat::type::traffic_bootstrap, nano::stat::dir::out, size_a); + this_l->stop (); + callback_a (ec, size_a); + }); + } } void nano::socket::start (std::chrono::steady_clock::time_point timeout_a) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 1e4a8158..278d6b6a 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -130,7 +130,7 @@ void nano::network::receive () void nano::network::process_packets () { - while (on) + while (on.load ()) { auto data (buffer_container.dequeue ()); if (data == nullptr) diff --git a/nano/node/node.hpp b/nano/node/node.hpp index 5ecef876..57167872 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -323,7 +324,7 @@ public: boost::asio::ip::udp::resolver resolver; std::vector packet_processing_threads; nano::node & node; - bool on; + std::atomic on; static uint16_t const node_port = nano::nano_network == nano::nano_networks::nano_live_network ? 7075 : 54000; static size_t const buffer_size = 512; static size_t const confirm_req_hashes_max = 6;