[14/23] Always process target events in the main UI

Message ID 1454517838-7784-15-git-send-email-palves@redhat.com
State New, archived
Headers

Commit Message

Pedro Alves Feb. 3, 2016, 4:43 p.m. UTC
  This makes target events always be always processed with the main UI
as current UI.  This way, warnings, debug output, etc. are always
consistently sent to the main console.
---
 gdb/event-top.c | 2 +-
 gdb/infrun.c    | 6 ++++++
 gdb/top.h       | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)
  

Patch

diff --git a/gdb/event-top.c b/gdb/event-top.c
index e2817c9..265787c 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -378,7 +378,7 @@  struct ui *main_ui = &main_ui_;
 struct ui *current_ui = &main_ui_;
 struct ui *ui_list = &main_ui_;
 
-static void
+void
 restore_ui_cleanup (void *data)
 {
   current_ui = (struct ui *) data;
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 554b5c8..5200f1e 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -3867,6 +3867,12 @@  fetch_inferior_event (void *client_data)
 
   memset (ecs, 0, sizeof (*ecs));
 
+  /* Events are always processed with the main UI as current UI.  This
+     way, warnings, debug output, etc. are always consistently sent to
+     the main console.  */
+  make_cleanup (restore_ui_cleanup, current_ui);
+  current_ui = main_ui;
+
   /* End up with readline processing input, if necessary.  */
   make_cleanup (reinstall_readline_callback_handler_cleanup, NULL);
 
diff --git a/gdb/top.h b/gdb/top.h
index 223c7d0..3505319 100644
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -131,6 +131,8 @@  extern void switch_thru_all_uis_next (struct switch_thru_all_uis *state);
        switch_thru_all_uis_cond (&STATE);		\
        switch_thru_all_uis_next (&STATE))		\
 
+extern void restore_ui_cleanup (void *data);
+
 /* From top.c.  */
 extern char *saved_command_line;
 extern int in_user_command;