[Lldb-commits] [lldb] r132301 - in /lldb/trunk: include/lldb/Core/Debugger.h source/Core/Debugger.cpp

Greg Clayton gclayton at apple.com
Sun May 29 16:07:38 PDT 2011


Author: gclayton
Date: Sun May 29 18:07:38 2011
New Revision: 132301

URL: http://llvm.org/viewvc/llvm-project?rev=132301&view=rev
Log:
Protect the input reader stack with a recursive mutex.


Modified:
    lldb/trunk/include/lldb/Core/Debugger.h
    lldb/trunk/source/Core/Debugger.cpp

Modified: lldb/trunk/include/lldb/Core/Debugger.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Debugger.h?rev=132301&r1=132300&r2=132301&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/Debugger.h (original)
+++ lldb/trunk/include/lldb/Core/Debugger.h Sun May 29 18:07:38 2011
@@ -451,6 +451,7 @@
     SourceManager m_source_manager;
     std::auto_ptr<CommandInterpreter> m_command_interpreter_ap;
 
+    Mutex m_input_readers_mutex;
     std::stack<lldb::InputReaderSP> m_input_readers;
     std::string m_input_reader_data;
 

Modified: lldb/trunk/source/Core/Debugger.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Debugger.cpp?rev=132301&r1=132300&r2=132301&view=diff
==============================================================================
--- lldb/trunk/source/Core/Debugger.cpp (original)
+++ lldb/trunk/source/Core/Debugger.cpp Sun May 29 18:07:38 2011
@@ -230,6 +230,7 @@
     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 @@
 {
     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 @@
 {
     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 @@
     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 @@
     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 @@
 
     // 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 @@
 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.





More information about the lldb-commits mailing list