Fix flushing bug in tui_puts_internal
authorTom Tromey <tom@tromey.com>
Tue, 2 Jul 2019 21:18:27 +0000 (15:18 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 17 Jul 2019 18:19:20 +0000 (12:19 -0600)
A while back I changed gdb not to flush in some places.  It turned out
that this broke the TUI a little.  An easy way to see it is to run
"gdb -tui -nx", then "file gdb" at the gdb prompt.  gdb will print the
usual "Reading symbols..." message -- but it won't appear on-screen
until the reading is complete.

This patch changes the TUI to do the equivalent of line buffering in
tui_puts_internal.

gdb/ChangeLog
2019-07-17  Tom Tromey  <tom@tromey.com>

* tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is
seen.

gdb/ChangeLog
gdb/tui/tui-io.c

index 5a3d6c584c7cfe8453892815edace654b58edda1..4890f6f351071ddc1307d9a3cead3a9db395791e 100644 (file)
@@ -1,3 +1,8 @@
+2019-07-17  Tom Tromey  <tom@tromey.com>
+
+       * tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is
+       seen.
+
 2019-07-17  Tom Tromey  <tom@tromey.com>
 
        * tui/tui-win.c (tui_source_window_base::set_new_height)
index c9607d8f3c8d3589bc6489c8bbb0662e3455c645..cb2730654874964d1907b923b6bebe6771de8eb4 100644 (file)
@@ -461,9 +461,13 @@ tui_puts_internal (WINDOW *w, const char *string, int *height)
 {
   char c;
   int prev_col = 0;
+  bool saw_nl = false;
 
   while ((c = *string++) != 0)
     {
+      if (c == '\n')
+       saw_nl = true;
+
       if (c == '\1' || c == '\2')
        {
          /* Ignore these, they are readline escape-marking
@@ -492,6 +496,8 @@ tui_puts_internal (WINDOW *w, const char *string, int *height)
        }
     }
   update_cmdwin_start_line ();
+  if (saw_nl)
+    wrefresh (w);
 }
 
 /* Print a string in the curses command window.  The output is