diff options
| author | luigi1111 <luigi1111w@gmail.com> | 2020-11-29 01:55:15 -0600 |
|---|---|---|
| committer | luigi1111 <luigi1111w@gmail.com> | 2020-11-29 01:55:15 -0600 |
| commit | a15d78170753132ee110e8286cc3f1be44a97533 (patch) | |
| tree | d7a7630e6c482923b297026cfcab4a90f90857f9 | |
| parent | c041550ffa6273d6c9cba1a02ef6ab5ec97bf4fb (diff) | |
| parent | 60bc676c14b418a4b4f6a094dbe57e700360b5f2 (diff) | |
| download | monzero-core-a15d78170753132ee110e8286cc3f1be44a97533.tar.gz monzero-core-a15d78170753132ee110e8286cc3f1be44a97533.tar.xz monzero-core-a15d78170753132ee110e8286cc3f1be44a97533.zip | |
Merge pull request #6995
60bc676 epee: readline_buffer - fix thread safety, fix sync() after stop() (xiphon)
| -rw-r--r-- | contrib/epee/src/readline_buffer.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp index 05322b693..bcf499963 100644 --- a/contrib/epee/src/readline_buffer.cpp +++ b/contrib/epee/src/readline_buffer.cpp @@ -51,6 +51,7 @@ rdln::readline_buffer::readline_buffer() void rdln::readline_buffer::start() { + boost::lock_guard<boost::mutex> lock(sync_mutex); if(m_cout_buf != NULL) return; m_cout_buf = std::cout.rdbuf(); @@ -60,6 +61,7 @@ void rdln::readline_buffer::start() void rdln::readline_buffer::stop() { + boost::lock_guard<boost::mutex> lock(sync_mutex); if(m_cout_buf == NULL) return; std::cout.rdbuf(m_cout_buf); @@ -88,9 +90,9 @@ rdln::linestatus rdln::readline_buffer::get_line(std::string& line) const void rdln::readline_buffer::set_prompt(const std::string& prompt) { + boost::lock_guard<boost::mutex> lock(sync_mutex); if(m_cout_buf == NULL) return; - boost::lock_guard<boost::mutex> lock(sync_mutex); rl_set_prompt(std::string(m_prompt_length, ' ').c_str()); rl_redisplay(); rl_set_prompt(prompt.c_str()); @@ -113,6 +115,12 @@ const std::vector<std::string>& rdln::readline_buffer::get_completions() int rdln::readline_buffer::sync() { boost::lock_guard<boost::mutex> lock(sync_mutex); + + if (m_cout_buf == nullptr) + { + return -1; + } + #if RL_READLINE_VERSION < 0x0700 char lbuf[2] = {0,0}; char *line = NULL; |
