aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee/src/readline_buffer.cpp
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-06-27 08:10:26 -0700
committerJethro Grassie <jtg@xtrabass.com>2017-06-28 07:54:20 -0400
commita73a42a6b0db8fc2f27e1eebdc046391f1289a3a (patch)
tree390ef4a6bc6d1ebe7bc6e7ca8ce2f0b31eae534f /contrib/epee/src/readline_buffer.cpp
parentFix multiline wallet cli output with readline (diff)
downloadmonero-a73a42a6b0db8fc2f27e1eebdc046391f1289a3a.tar.xz
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>
Diffstat (limited to 'contrib/epee/src/readline_buffer.cpp')
-rw-r--r--contrib/epee/src/readline_buffer.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp
index 3865b565c..34835b80d 100644
--- a/contrib/epee/src/readline_buffer.cpp
+++ b/contrib/epee/src/readline_buffer.cpp
@@ -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()