diff options
author | Greg Clayton <gclayton@apple.com> | 2011-05-29 23:07:38 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2011-05-29 23:07:38 +0000 |
commit | 15184db09217553490750c5cbd03498fd38b0ac6 (patch) | |
tree | 98915154e67d1546d237899c52e716fae77bf896 /lldb/source/Core/Debugger.cpp | |
parent | d9bcddd6b906525a2af06a6d66d1b3f73199433b (diff) | |
download | bcm5719-llvm-15184db09217553490750c5cbd03498fd38b0ac6.tar.gz bcm5719-llvm-15184db09217553490750c5cbd03498fd38b0ac6.zip |
Protect the input reader stack with a recursive mutex.
llvm-svn: 132301
Diffstat (limited to 'lldb/source/Core/Debugger.cpp')
-rw-r--r-- | lldb/source/Core/Debugger.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp index 6cbc92ed3aa..80035363650 100644 --- a/lldb/source/Core/Debugger.cpp +++ b/lldb/source/Core/Debugger.cpp @@ -230,6 +230,7 @@ Debugger::Debugger () : m_listener ("lldb.Debugger"), m_source_manager (), m_command_interpreter_ap (new CommandInterpreter (*this, eScriptLanguageDefault, false)), + m_input_readers_mutex (Mutex::eMutexTypeRecursive), m_input_readers (), m_input_reader_data () { @@ -356,6 +357,7 @@ Debugger::GetCurrentInputReader () { InputReaderSP reader_sp; + Mutex::Locker locker (m_input_readers_mutex); if (!m_input_readers.empty()) { // Clear any finished readers from the stack @@ -422,6 +424,7 @@ Debugger::CleanUpInputReaders () { m_input_reader_data.clear(); + Mutex::Locker locker (m_input_readers_mutex); // The bottom input reader should be the main debugger input reader. We do not want to close that one here. while (m_input_readers.size() > 1) { @@ -476,6 +479,7 @@ Debugger::WriteToDefaultReader (const char *bytes, size_t bytes_len) if (m_input_reader_data.empty()) return; + Mutex::Locker locker (m_input_readers_mutex); while (!m_input_readers.empty() && !m_input_reader_data.empty()) { // Get the input reader from the top of the stack @@ -515,6 +519,7 @@ Debugger::PushInputReader (const InputReaderSP& reader_sp) if (top_reader_sp) top_reader_sp->Notify (eInputReaderDeactivate); + Mutex::Locker locker (m_input_readers_mutex); m_input_readers.push (reader_sp); reader_sp->Notify (eInputReaderActivate); ActivateInputReader (reader_sp); @@ -527,6 +532,7 @@ Debugger::PopInputReader (const lldb::InputReaderSP& pop_reader_sp) // The reader on the stop of the stack is done, so let the next // read on the stack referesh its prompt and if there is one... + Mutex::Locker locker (m_input_readers_mutex); if (!m_input_readers.empty()) { // Cannot call GetCurrentInputReader here, as that would cause an infinite loop. @@ -557,6 +563,7 @@ bool Debugger::CheckIfTopInputReaderIsDone () { bool result = false; + Mutex::Locker locker (m_input_readers_mutex); if (!m_input_readers.empty()) { // Cannot call GetCurrentInputReader here, as that would cause an infinite loop. |