aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume LABARTHE <guillaume.labarthe@gmail.com>2019-07-18 17:20:04 +0100
committerPedro Alves <palves@redhat.com>2019-07-18 17:20:04 +0100
commitafe09f0b6311a4dd1a7e2dc6491550bb228734f8 (patch)
tree6e1ac0fdefe6e6c7664e2f29fdf300238f725db7
parentcd215b2eb74c179d936a3b28577753a08de1cf83 (diff)
downloadbinutils-afe09f0b6311a4dd1a7e2dc6491550bb228734f8.zip
binutils-afe09f0b6311a4dd1a7e2dc6491550bb228734f8.tar.gz
binutils-afe09f0b6311a4dd1a7e2dc6491550bb228734f8.tar.bz2
Fix for using named pipes on Windows
On Windows, passing a named pipe as terminal argument to the new-ui command does not work. The problem is that the new_ui_command function in top.c opens the same tty three times, for stdin, stdout and stderr. With Windows named pipes, the second and third calls to open fail. Opening the file only once and passing the same stream for stdin, stdout and stderr makes it work. Pedro says: I tried it on GNU/Linux and things still work. I ran all the MI tests with forced new-ui, with: $ make check TESTS="gdb.mi/*.exp" RUNTESTFLAGS="FORCE_MI_SEPARATE_UI=1" and saw no regressions. gdb/ChangeLog: 2019-07-18 Guillaume LABARTHE <guillaume.labarthe@gmail.com> * top.c (new_ui_command): Open specified terminal just once.
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/top.c18
2 files changed, 11 insertions, 11 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index fa669da..d6fe989 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2019-07-18 Guillaume LABARTHE <guillaume.labarthe@gmail.com>
+
+ * top.c (new_ui_command): Open specified terminal just once.
+
2019-07-18 Tom Tromey <tromey@adacore.com>
* symtab.c (main_name): Constify return type.
diff --git a/gdb/top.c b/gdb/top.c
index 83a3604..60f81b3 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -337,8 +337,6 @@ open_terminal_stream (const char *name)
static void
new_ui_command (const char *args, int from_tty)
{
- gdb_file_up stream[3];
- int i;
int argc;
const char *interpreter_name;
const char *tty_name;
@@ -357,13 +355,13 @@ new_ui_command (const char *args, int from_tty)
{
scoped_restore save_ui = make_scoped_restore (&current_ui);
- /* Open specified terminal, once for each of
- stdin/stdout/stderr. */
- for (i = 0; i < 3; i++)
- stream[i] = open_terminal_stream (tty_name);
+ /* Open specified terminal. Note: we used to open it three times,
+ once for each of stdin/stdout/stderr, but that does not work
+ with Windows named pipes. */
+ gdb_file_up stream = open_terminal_stream (tty_name);
std::unique_ptr<ui> ui
- (new struct ui (stream[0].get (), stream[1].get (), stream[2].get ()));
+ (new struct ui (stream.get (), stream.get (), stream.get ()));
ui->async = 1;
@@ -373,10 +371,8 @@ new_ui_command (const char *args, int from_tty)
interp_pre_command_loop (top_level_interpreter ());
- /* Make sure the files are not closed. */
- stream[0].release ();
- stream[1].release ();
- stream[2].release ();
+ /* Make sure the file is not closed. */
+ stream.release ();
ui.release ();
}