diff options
-rw-r--r-- | lldb/include/lldb/Core/Debugger.h | 3 | ||||
-rw-r--r-- | lldb/source/API/SBDebugger.cpp | 3 | ||||
-rw-r--r-- | lldb/source/Core/Debugger.cpp | 19 |
3 files changed, 25 insertions, 0 deletions
diff --git a/lldb/include/lldb/Core/Debugger.h b/lldb/include/lldb/Core/Debugger.h index b121ff9c11a..0787a017520 100644 --- a/lldb/include/lldb/Core/Debugger.h +++ b/lldb/include/lldb/Core/Debugger.h @@ -372,6 +372,9 @@ public: const char **end); + void + CleanUpInputReaders (); + protected: static void diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 2777741ee5e..93d94e6e318 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -58,6 +58,9 @@ SBDebugger::Clear () if (log) log->Printf ("SBDebugger(%p)::Clear ()", m_opaque_sp.get()); + + if (m_opaque_sp) + m_opaque_sp->CleanUpInputReaders (); m_opaque_sp.reset(); } diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp index 179e4607c57..a73ac1bf47e 100644 --- a/lldb/source/Core/Debugger.cpp +++ b/lldb/source/Core/Debugger.cpp @@ -184,6 +184,7 @@ Debugger::Debugger () : Debugger::~Debugger () { + CleanUpInputReaders(); int num_targets = m_target_list.GetNumTargets(); for (int i = 0; i < num_targets; i++) { @@ -390,6 +391,24 @@ Debugger::DispatchInputEndOfFile () } void +Debugger::CleanUpInputReaders () +{ + m_input_reader_data.clear(); + + while (m_input_readers.size() > 1) + { + while (CheckIfTopInputReaderIsDone ()) ; + + InputReaderSP reader_sp (m_input_readers.top()); + if (reader_sp) + { + reader_sp->Notify (eInputReaderEndOfFile); + reader_sp->SetIsDone (true); + } + } +} + +void Debugger::WriteToDefaultReader (const char *bytes, size_t bytes_len) { if (bytes && bytes_len) |