labath created this revision.
labath added a reviewer: clayborg.
labath added a subscriber: lldb-commits.

Process::SetExitStatus was popping the process io handler and resetting 
m_process_input_reader
shared pointer, which is not a safe thing to do as the function is called 
asynchronously and
other threads may be accessing the member variable. (E.g. if the process 
terminates really
quickly, the private state thread might only be in the process of pushing the 
handler on the
stack. Sometimes, this leads to deadlock, as the shared pointer's state gets 
corrupted by the
concurrent access.

Since the IOHandler will be popped anyway in 
Process:HandleProcessStateChangedEvent when the
exited event gets processed, doing the same in SetExitStatus seems to be 
unnecessary.

http://reviews.llvm.org/D22209

Files:
  source/Target/Process.cpp

Index: source/Target/Process.cpp
===================================================================
--- source/Target/Process.cpp
+++ source/Target/Process.cpp
@@ -1462,14 +1462,6 @@
     else
         m_exit_string.clear();
 
-    // When we exit, we don't need the input reader anymore
-    if (m_process_input_reader)
-    {
-        m_process_input_reader->SetIsDone(true);
-        m_process_input_reader->Cancel();
-        m_process_input_reader.reset();
-    }
-
     // Clear the last natural stop ID since it has a strong
     // reference to this process
     m_mod_id.SetStopEventForLastNaturalStopID(EventSP());


Index: source/Target/Process.cpp
===================================================================
--- source/Target/Process.cpp
+++ source/Target/Process.cpp
@@ -1462,14 +1462,6 @@
     else
         m_exit_string.clear();
 
-    // When we exit, we don't need the input reader anymore
-    if (m_process_input_reader)
-    {
-        m_process_input_reader->SetIsDone(true);
-        m_process_input_reader->Cancel();
-        m_process_input_reader.reset();
-    }
-
     // Clear the last natural stop ID since it has a strong
     // reference to this process
     m_mod_id.SetStopEventForLastNaturalStopID(EventSP());
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to