console_handler: handle EOF properly

Exit instead of reading "empty" commands in an infinite loop.
This commit is contained in:
moneromooo-monero 2015-05-30 19:24:15 +01:00
parent 5001489353
commit 87c01c30f3
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3

View File

@ -58,6 +58,9 @@ namespace epee
if (!start_read())
return false;
if (state_eos == m_read_status)
return false;
std::unique_lock<std::mutex> lock(m_response_mutex);
while (state_init == m_read_status)
{
@ -71,11 +74,14 @@ namespace epee
res = true;
}
m_read_status = state_init;
if (!eos())
m_read_status = state_init;
return res;
}
bool eos() const { return m_read_status == state_eos; }
void stop()
{
if (m_run)
@ -167,7 +173,12 @@ namespace epee
{
read_ok = false;
}
if (std::cin.eof()) {
m_read_status = state_eos;
m_response_cv.notify_one();
break;
}
else
{
std::unique_lock<std::mutex> lock(m_response_mutex);
if (m_run.load(std::memory_order_relaxed))
@ -189,7 +200,8 @@ namespace epee
state_init,
state_success,
state_error,
state_cancelled
state_cancelled,
state_eos
};
private:
@ -266,6 +278,10 @@ namespace epee
{
LOG_PRINT("Failed to read line.", LOG_LEVEL_0);
}
if (m_stdin_reader.eos())
{
break;
}
string_tools::trim(command);
LOG_PRINT_L2("Read command: " << command);