aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2016-06-21 01:11:46 +0100
committerPedro Alves <palves@redhat.com>2016-06-21 01:11:46 +0100
commit7c36c34e4c5c9438f17373a72773d741a17dc7b3 (patch)
tree1bb740078dd6809f3555c0dd0b3d918a357a93c2
parent73ab01a07dfef77a9d845be2ef87754435eeffa1 (diff)
downloadgdb-7c36c34e4c5c9438f17373a72773d741a17dc7b3.zip
gdb-7c36c34e4c5c9438f17373a72773d741a17dc7b3.tar.gz
gdb-7c36c34e4c5c9438f17373a72773d741a17dc7b3.tar.bz2
Always run async signal handlers in the main UI
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.
-rw-r--r--gdb/event-loop.c4
-rw-r--r--gdb/event-top.c5
-rw-r--r--gdb/top.h5
3 files changed, 11 insertions, 3 deletions
diff --git a/gdb/event-loop.c b/gdb/event-loop.c
index 60ef2a5..fe28305 100644
--- a/gdb/event-loop.c
+++ b/gdb/event-loop.c
@@ -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);
}
diff --git a/gdb/event-top.c b/gdb/event-top.c
index c6e3b7e..63f6896 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -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_;
diff --git a/gdb/top.h b/gdb/top.h
index 80fcb40..a76abaf 100644
--- 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;