Always run async signal handlers in the main UI
authorPedro Alves <palves@redhat.com>
Tue, 21 Jun 2016 00:11:46 +0000 (01:11 +0100)
committerPedro Alves <palves@redhat.com>
Tue, 21 Jun 2016 00:11:46 +0000 (01:11 +0100)
Async signal handlers have no connection to whichever was the current
UI, and thus always run on the main one.

gdb/ChangeLog:
2016-06-21  Pedro Alves  <palves@redhat.com>

* event-loop.c: Include top.h.
(invoke_async_signal_handlers): Switch to the main UI.
* event-top.c (main_ui_): Update comment.
(main_ui): New global.
* top.h (main_ui): Declare.

gdb/event-loop.c
gdb/event-top.c
gdb/top.h

index 60ef2a5d96ed68d63ec2332764bf5120bc2cfbbb..fe283050507765c5bb2198658bc1c66567e003b2 100644 (file)
@@ -35,6 +35,7 @@
 #include "gdb_sys_time.h"
 #include "gdb_select.h"
 #include "observer.h"
+#include "top.h"
 
 /* Tell create_file_handler what events we are interested in.
    This is used by the select version of the event loop.  */
@@ -967,6 +968,9 @@ invoke_async_signal_handlers (void)
        break;
       any_ready = 1;
       async_handler_ptr->ready = 0;
+      /* Async signal handlers have no connection to whichever was the
+        current UI, and thus always run on the main one.  */
+      current_ui = main_ui;
       (*async_handler_ptr->proc) (async_handler_ptr->client_data);
     }
 
index c6e3b7ee36711757855499c2d86e0d0e37c01b1a..63f6896c0774933af84540fbe17a67ae771ba56e 100644 (file)
@@ -437,11 +437,10 @@ top_level_prompt (void)
   return xstrdup (prompt);
 }
 
-/* The main UI.  This is the UI that is bound to stdin/stdout/stderr.
-   It always exists and is created automatically when GDB starts
-   up.  */
+/* The main UI.  */
 static struct ui main_ui_;
 
+struct ui *main_ui = &main_ui_;
 struct ui *current_ui = &main_ui_;
 struct ui *ui_list = &main_ui_;
 
index 80fcb40b7cf53b2e320140962ff8e9bde3590945..a76abaf2b3cd5cc42254edd9e039f0396b28c8b2 100644 (file)
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -86,6 +86,11 @@ struct ui
   struct ui_file *m_gdb_stdlog;
 };
 
+/* The main UI.  This is the UI that is bound to stdin/stdout/stderr.
+   It always exists and is created automatically when GDB starts
+   up.  */
+extern struct ui *main_ui;
+
 /* The current UI.  */
 extern struct ui *current_ui;