Merge pull request #308

35b160e fix ^D exit for bitmonerod (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2015-06-11 10:27:30 +02:00
commit f89cf1df87
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD
4 changed files with 12 additions and 12 deletions

View file

@ -240,9 +240,9 @@ namespace epee
} }
template<class chain_handler> template<class chain_handler>
bool run(chain_handler ch_handler, const std::string& prompt = "#", const std::string& usage = "") bool run(chain_handler ch_handler, const std::string& prompt = "#", const std::string& usage = "", std::function<void(void)> exit_handler = NULL)
{ {
return run(prompt, usage, [&](const std::string& cmd) { return ch_handler(cmd); }, [] { }); return run(prompt, usage, [&](const std::string& cmd) { return ch_handler(cmd); }, exit_handler);
} }
void stop() void stop()
@ -252,8 +252,8 @@ namespace epee
} }
private: private:
template<typename t_cmd_handler, typename t_exit_handler> template<typename t_cmd_handler>
bool run(const std::string& prompt, const std::string& usage, const t_cmd_handler& cmd_handler, const t_exit_handler& exit_handler) bool run(const std::string& prompt, const std::string& usage, const t_cmd_handler& cmd_handler, std::function<void(void)> exit_handler)
{ {
TRY_ENTRY(); TRY_ENTRY();
bool continue_handle = true; bool continue_handle = true;
@ -429,9 +429,9 @@ namespace epee
std::unique_ptr<boost::thread> m_console_thread; std::unique_ptr<boost::thread> m_console_thread;
async_console_handler m_console_handler; async_console_handler m_console_handler;
public: public:
bool start_handling(const std::string& prompt, const std::string& usage_string = "") bool start_handling(const std::string& prompt, const std::string& usage_string = "", std::function<void(void)> exit_handler = NULL)
{ {
m_console_thread.reset(new boost::thread(boost::bind(&console_handlers_binder::run_handling, this, prompt, usage_string))); m_console_thread.reset(new boost::thread(boost::bind(&console_handlers_binder::run_handling, this, prompt, usage_string, exit_handler)));
m_console_thread->detach(); m_console_thread->detach();
return true; return true;
} }
@ -441,9 +441,9 @@ namespace epee
m_console_handler.stop(); m_console_handler.stop();
} }
bool run_handling(const std::string& prompt, const std::string& usage_string) bool run_handling(const std::string& prompt, const std::string& usage_string, std::function<void(void)> exit_handler = NULL)
{ {
return m_console_handler.run(boost::bind(&console_handlers_binder::process_command_str, this, _1), prompt, usage_string); return m_console_handler.run(boost::bind(&console_handlers_binder::process_command_str, this, _1), prompt, usage_string, exit_handler);
} }
}; };

View file

@ -196,11 +196,11 @@ bool t_command_server::process_command_vec(const std::vector<std::string>& cmd)
return result; return result;
} }
bool t_command_server::start_handling() bool t_command_server::start_handling(std::function<void(void)> exit_handler)
{ {
if (m_is_rpc) return false; if (m_is_rpc) return false;
m_command_lookup.start_handling("", get_commands_str()); m_command_lookup.start_handling("", get_commands_str(), exit_handler);
return true; return true;
} }

View file

@ -62,7 +62,7 @@ public:
bool process_command_vec(const std::vector<std::string>& cmd); bool process_command_vec(const std::vector<std::string>& cmd);
bool start_handling(); bool start_handling(std::function<void(void)> exit_handler = NULL);
void stop_handling(); void stop_handling();

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(); rpc_commands->start_handling(std::bind(&daemonize::t_daemon::stop, this));
} }
mp_internals->p2p.run(); // blocks until p2p goes down mp_internals->p2p.run(); // blocks until p2p goes down