Merge pull request #320

f9b361b daemon: fix an exit crash (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2015-06-14 13:09:47 +02:00
commit 1595187ae2
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
2 changed files with 12 additions and 1 deletions

View File

@ -126,7 +126,7 @@ bool t_daemon::run(bool interactive)
if (interactive) if (interactive)
{ {
rpc_commands = new daemonize::t_command_server(0, 0, false, mp_internals->rpc.get_server()); 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 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 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 } // namespace daemonize

View File

@ -38,6 +38,8 @@ class t_internals;
class t_daemon final { class t_daemon final {
public: public:
static void init_options(boost::program_options::options_description & option_spec); static void init_options(boost::program_options::options_description & option_spec);
private:
void stop_p2p();
private: private:
std::unique_ptr<t_internals> mp_internals; std::unique_ptr<t_internals> mp_internals;
public: public: