diff options
author | Riccardo Spagni <ric@spagni.net> | 2018-10-16 18:22:55 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2018-10-16 18:22:55 +0200 |
commit | 5638b07d9faa0ceb6c88c17e873256ec2569ce5a (patch) | |
tree | d0c63d44a03112578717edbfa5a1414d8cde27c9 /src | |
parent | Merge pull request #4624 (diff) | |
parent | daemon: fix reading past stack on exit (diff) | |
download | monero-5638b07d9faa0ceb6c88c17e873256ec2569ce5a.tar.xz |
Merge pull request #4603
8e7baeb3 daemon: fix reading past stack on exit (moneromooo-monero)
Diffstat (limited to 'src')
-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 { |