Merge pull request #299

87c01c3 console_handler: handle EOF properly (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2015-05-30 22:33:18 +02:00
commit bcf064e9ed
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
1 changed files with 19 additions and 3 deletions

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;
}
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);