fix ^D exit for bitmonerod
It uses the async console handler differently than simplewallet, and wasn't running the same exit code, causing it to never actually exit after breaking out of the console entry loop.
This commit is contained in:
parent
5df550d276
commit
35b160edea
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue