summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Core/Debugger.h3
-rw-r--r--lldb/source/API/SBDebugger.cpp3
-rw-r--r--lldb/source/Core/Debugger.cpp19
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)
OpenPOWER on IntegriCloud