Add code to make sure InputReaders finish and are cleaned up when
a Debugger object is destroyed or re-set. (Thus making sure that, for example, the Python interpreter finishes and exits cleanly rather than being left in an undefined state.) llvm-svn: 122255
This commit is contained in:
parent
64c2c5798a
commit
3d6086f628
|
@ -372,6 +372,9 @@ public:
|
|||
const char **end);
|
||||
|
||||
|
||||
void
|
||||
CleanUpInputReaders ();
|
||||
|
||||
protected:
|
||||
|
||||
static void
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -184,6 +184,7 @@ Debugger::Debugger () :
|
|||
|
||||
Debugger::~Debugger ()
|
||||
{
|
||||
CleanUpInputReaders();
|
||||
int num_targets = m_target_list.GetNumTargets();
|
||||
for (int i = 0; i < num_targets; i++)
|
||||
{
|
||||
|
@ -389,6 +390,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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue