aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2015-06-14 00:30:04 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2015-06-14 00:31:09 +0100
commitf9b361be8a32fec2cc6ef0f835e4b8077b713753 (patch)
treec1a7c110f70d7064f4b0e333f350a389e63d0be3
parentMerge pull request #312 (diff)
downloadmonero-f9b361be8a32fec2cc6ef0f835e4b8077b713753.tar.xz
daemon: fix an exit crash
-rw-r--r--src/daemon/daemon.cpp11
-rw-r--r--src/daemon/daemon.h2
2 files changed, 12 insertions, 1 deletions
diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp
index 2bd592611..6a5943c8b 100644
--- a/src/daemon/daemon.cpp
+++ b/src/daemon/daemon.cpp
@@ -126,7 +126,7 @@ bool t_daemon::run(bool interactive)
if (interactive)
{
rpc_commands = new daemonize::t_command_server(0, 0, false, mp_internals->rpc.get_server());
- rpc_commands->start_handling(std::bind(&daemonize::t_daemon::stop, this));
+ rpc_commands->start_handling(std::bind(&daemonize::t_daemon::stop_p2p, this));
}
mp_internals->p2p.run(); // blocks until p2p goes down
@@ -163,4 +163,13 @@ void t_daemon::stop()
mp_internals.reset(nullptr); // Ensure resources are cleaned up before we return
}
+void t_daemon::stop_p2p()
+{
+ if (nullptr == mp_internals)
+ {
+ throw std::runtime_error{"Can't send stop signal to a stopped daemon"};
+ }
+ mp_internals->p2p.get().send_stop_signal();
+}
+
} // namespace daemonize
diff --git a/src/daemon/daemon.h b/src/daemon/daemon.h
index 1a6a53d3b..8ed2a2f03 100644
--- a/src/daemon/daemon.h
+++ b/src/daemon/daemon.h
@@ -39,6 +39,8 @@ class t_daemon final {
public:
static void init_options(boost::program_options::options_description & option_spec);
private:
+ void stop_p2p();
+private:
std::unique_ptr<t_internals> mp_internals;
public:
t_daemon(