diff --git a/src/rpc/cli.cpp b/src/rpc/cli.cpp index ec6cfe66c..049c8bd64 100644 --- a/src/rpc/cli.cpp +++ b/src/rpc/cli.cpp @@ -54,29 +54,6 @@ void cli::send_notice( uint64_t callback_id, variants args /* = variants() */ ) FC_ASSERT(false); } -void cli::stop() -{ - cancel(); - _run_complete.wait(); -} - -void cli::cancel() -{ - _run_complete.cancel(); -#ifdef HAVE_EDITLINE - if( _getline_thread ) - { - _getline_thread->signal(SIGINT); - _getline_thread = nullptr; - } -#endif -} - -void cli::wait() -{ - _run_complete.wait(); -} - void cli::format_result( const string& method, std::function formatter) { _result_formatters[method] = formatter; @@ -267,7 +244,7 @@ static int interruptible_getc(void) if( r == -1 && errno == EINTR ) cli_quitting = true; - return r == 1 ? c : EOF; + return r == 1 && !cli_quitting ? c : EOF; } void cli::start() @@ -292,6 +269,30 @@ void cli::start() _run_complete = fc::async( [this](){ run(); } ); } +void cli::cancel() +{ + _run_complete.cancel(); +#ifdef HAVE_EDITLINE + cli_quitting = true; + if( _getline_thread ) + { + _getline_thread->signal(SIGINT); + _getline_thread = nullptr; + } +#endif +} + +void cli::stop() +{ + cancel(); + _run_complete.wait(); +} + +void cli::wait() +{ + _run_complete.wait(); +} + /*** * @brief Read input from the user * @param prompt the prompt to display