diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2018-10-15 22:10:49 +0000 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2018-10-15 22:13:05 +0000 |
commit | 6f28667aa3aea43b6bc697a9896d8e44fd12a7da (patch) | |
tree | a337826f5f64497aec11b0da603f45cb65f8aa3b /src/daemon/daemon.cpp | |
parent | Merge pull request #4502 (diff) | |
download | monero-6f28667aa3aea43b6bc697a9896d8e44fd12a7da.tar.xz |
daemon: fix reading past stack on exit
Diffstat (limited to 'src/daemon/daemon.cpp')
-rw-r--r-- | src/daemon/daemon.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index f53649518..49d6d49cf 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -137,13 +137,18 @@ bool t_daemon::run(bool interactive) throw std::runtime_error{"Can't run stopped daemon"}; } - std::atomic<bool> stop(false); - boost::thread([&stop, this] { + std::atomic<bool> stop(false), shutdown(false); + boost::thread stop_thread = boost::thread([&stop, &shutdown, this] { while (!stop) epee::misc_utils::sleep_no_w(100); - this->stop_p2p(); - }).detach(); - tools::signal_handler::install([&stop](int){ stop = true; }); + if (shutdown) + this->stop_p2p(); + }); + epee::misc_utils::auto_scope_leave_caller scope_exit_handler = epee::misc_utils::create_scope_leave_handler([&](){ + stop = true; + stop_thread.join(); + }); + tools::signal_handler::install([&stop, &shutdown](int){ stop = shutdown = true; }); try { |