summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/Debugger.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-05-29 23:07:38 +0000
committerGreg Clayton <gclayton@apple.com>2011-05-29 23:07:38 +0000
commit15184db09217553490750c5cbd03498fd38b0ac6 (patch)
tree98915154e67d1546d237899c52e716fae77bf896 /lldb/source/Core/Debugger.cpp
parentd9bcddd6b906525a2af06a6d66d1b3f73199433b (diff)
downloadbcm5719-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.cpp7
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.
OpenPOWER on IntegriCloud