[Lldb-commits] [lldb] r149623 - /lldb/trunk/tools/driver/Driver.cpp

Greg Clayton gclayton at apple.com
Thu Feb 2 11:28:31 PST 2012


Author: gclayton
Date: Thu Feb  2 13:28:31 2012
New Revision: 149623

URL: http://llvm.org/viewvc/llvm-project?rev=149623&view=rev
Log:
Fixed terminal settings not being properly restored when "quit" was run. 
This affected bash users.


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

Modified: lldb/trunk/tools/driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/driver/Driver.cpp?rev=149623&r1=149622&r2=149623&view=diff
==============================================================================
--- lldb/trunk/tools/driver/Driver.cpp (original)
+++ lldb/trunk/tools/driver/Driver.cpp Thu Feb  2 13:28:31 2012
@@ -37,6 +37,7 @@
 using namespace lldb;
 
 static void reset_stdin_termios ();
+static bool g_old_stdin_termios_is_valid = false;
 static struct termios g_old_stdin_termios;
 
 static char *g_debugger_name =  (char *) "";
@@ -47,7 +48,11 @@
 static void
 reset_stdin_termios ()
 {
-    ::tcsetattr (STDIN_FILENO, TCSANOW, &g_old_stdin_termios);
+    if (g_old_stdin_termios_is_valid)
+    {
+        g_old_stdin_termios_is_valid = false;
+        ::tcsetattr (STDIN_FILENO, TCSANOW, &g_old_stdin_termios);
+    }
 }
 
 typedef struct
@@ -1109,7 +1114,10 @@
    // struct termios stdin_termios;
 
     if (::tcgetattr(STDIN_FILENO, &g_old_stdin_termios) == 0)
+    {
+        g_old_stdin_termios_is_valid = true;
         atexit (reset_stdin_termios);
+    }
 
     ::setbuf (stdin, NULL);
     ::setbuf (stdout, NULL);
@@ -1348,10 +1356,6 @@
                         {
                             if (event_type & SBCommandInterpreter::eBroadcastBitQuitCommandReceived)
                             {
-                                editline_output_pty.CloseMasterFileDescriptor();
-                                master_out_comm.Disconnect();
-                                out_comm_2.Disconnect();
-                                fclose (stdin);
                                 done = true;
                             }
                             else if (event_type & SBCommandInterpreter::eBroadcastBitAsynchronousErrorData)
@@ -1369,7 +1373,11 @@
                 }
             }
 
-            reset_stdin_termios ();
+            editline_output_pty.CloseMasterFileDescriptor();
+            master_out_comm.Disconnect();
+            out_comm_2.Disconnect();
+            reset_stdin_termios();
+            fclose (stdin);
 
             CloseIOChannelFile ();
 





More information about the lldb-commits mailing list