monero-wallet-cli: hang on exit in readline code (#2117)
readline_buffer: fix start/stop threads being starved by process process could run for quite some time re-acquiring the process lock, leaving start/stop starving. Yielding after unlock in process is much better but doesn't seem to be enough to reliably yield, so we sleep for a millisecond, which should be transparent for user input anyway. Signed-off-by: Jethro Grassie <jtg@xtrabass.com>
This commit is contained in:
parent
be9d4f0411
commit
a73a42a6b0
|
@ -5,6 +5,7 @@
|
|||
#include <unistd.h>
|
||||
#include <mutex>
|
||||
#include <condition_variable>
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
static int process_input();
|
||||
static void install_line_handler();
|
||||
|
@ -83,10 +84,17 @@ void rdln::readline_buffer::set_prompt(const std::string& prompt)
|
|||
|
||||
int rdln::readline_buffer::process()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(process_mutex);
|
||||
process_mutex.lock();
|
||||
if(m_cout_buf == NULL)
|
||||
{
|
||||
process_mutex.unlock();
|
||||
boost::this_thread::sleep_for(boost::chrono::milliseconds( 1 ));
|
||||
return 0;
|
||||
return process_input();
|
||||
}
|
||||
int count = process_input();
|
||||
process_mutex.unlock();
|
||||
boost::this_thread::sleep_for(boost::chrono::milliseconds( 1 ));
|
||||
return count;
|
||||
}
|
||||
|
||||
int rdln::readline_buffer::sync()
|
||||
|
|
Loading…
Reference in New Issue