* ui-file.c (stdio_file_read): Call gdb_select before read.
authorDaniel Jacobowitz <drow@false.org>
Fri, 13 Nov 2009 22:54:42 +0000 (22:54 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 13 Nov 2009 22:54:42 +0000 (22:54 +0000)
gdb/ChangeLog
gdb/ui-file.c

index aaa0af46218f48a04d8dce87fb25e9da73b2b745..f6aa0cf9f1dea0015c232b5326fb8eb6acbc3209 100644 (file)
@@ -1,3 +1,7 @@
+2009-11-13  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * ui-file.c (stdio_file_read): Call gdb_select before read.
+
 2009-11-13  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * mips-tdep.c (mips_insn16_frame_this_id): Mark the outermost
index 527917c414fe8872c8180af623e4dca1afa82b65..b9ddbb5c5a795d1672632e5cec28b5d77599d936 100644 (file)
@@ -23,6 +23,7 @@
 #include "defs.h"
 #include "ui-file.h"
 #include "gdb_string.h"
+#include "gdb_select.h"
 
 #include <errno.h>
 
@@ -471,6 +472,19 @@ stdio_file_read (struct ui_file *file, char *buf, long length_buf)
   if (stdio->magic != &stdio_file_magic)
     internal_error (__FILE__, __LINE__,
                    _("stdio_file_read: bad magic number"));
+
+  /* For the benefit of Windows, call gdb_select before reading from
+     the file.  Wait until at least one byte of data is available.
+     Control-C can interrupt gdb_select, but not read.  */
+  {
+    int fd = fileno (stdio->file);
+    fd_set readfds;
+    FD_ZERO (&readfds);
+    FD_SET (fd, &readfds);
+    if (gdb_select (fd + 1, &readfds, NULL, NULL, NULL) == -1)
+      return -1;
+  }
+
   return read (fileno (stdio->file), buf, length_buf);
 }