[Lldb-commits] [lldb] r137421 - /lldb/trunk/tools/driver/IOChannel.cpp

Jason Molenda jmolenda at apple.com
Thu Aug 11 19:40:17 PDT 2011


Author: jmolenda
Date: Thu Aug 11 21:40:17 2011
New Revision: 137421

URL: http://llvm.org/viewvc/llvm-project?rev=137421&view=rev
Log:
Fixes the occasional crash on exit when quitting lldb with control-D.

If the IOChannel has already freed out its m_driver member, and
there's still a character to be read/written (that is, the ^D
character), just skip that char instead of trying to write through
a null object pointer.

Modified:
    lldb/trunk/tools/driver/IOChannel.cpp

Modified: lldb/trunk/tools/driver/IOChannel.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/driver/IOChannel.cpp?rev=137421&r1=137420&r2=137421&view=diff
==============================================================================
--- lldb/trunk/tools/driver/IOChannel.cpp (original)
+++ lldb/trunk/tools/driver/IOChannel.cpp Thu Aug 11 21:40:17 2011
@@ -503,6 +503,15 @@
     if (len == 0)
         return;
 
+    // We're in the process of exiting -- IOChannel::Run() has already completed
+    // and set m_driver to NULL - it is time for us to leave now.  We might not
+    // print the final ^D to stdout in this case.  We need to do some re-work on
+    // how the I/O streams are managed at some point.
+    if (m_driver == NULL)
+    {
+        return;
+    }
+
     // Use the mutex to make sure OutWrite and ErrWrite do not interfere with each other's output.
     IOLocker locker (m_output_mutex);
     if (m_driver->EditlineReaderIsTop() && asynchronous)





More information about the lldb-commits mailing list