From: Patrick Palka <patrick@parcs.ath.cx>
To: gdb-patches@sourceware.org
Cc: Patrick Palka <patrick@parcs.ath.cx>
Subject: [PATCH] Make sure terminal settings are restored before exiting
Date: Tue, 28 Jul 2015 03:18:00 -0000 [thread overview]
Message-ID: <1438053504-21507-1-git-send-email-patrick@parcs.ath.cx> (raw)
When exiting GDB -- whether it's via the "quit" command, via a SIGTERM,
or otherwise -- we should leave the terminal in the state we acquired
it. To that end, we have to undo any modifications that may have been
made by the TUI (ncurses) or by the CLI (readline).
[ Note that we already take a snapshot of the original tty state and save
it to inflow.c:initial_gdb_ttystate. Using this variable we can
define a new function restore_initial_gdb_ttystate and use it here.
We can replace the call to rl_deprep_terminal with such a function,
though it wouldn't hurt to have both around either. Is this a good
idea?
As far as testing goes, I am having trouble figuring out how to
retrieve the pid of the GDB subprocess in order to kill it via SIGTERM
with the subshell/stty approach used in
batch-preserve-term-settings.exp. Seems non-trivial. Any ideas? ]
gdb/ChangeLog:
* top.c (quit_force): Undo any modifications that may have been
made the terminal by calling target_terminal_ours, then
tui_disable, then rl_deprep_terminal.
---
gdb/top.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/gdb/top.c b/gdb/top.c
index 1e30b1c..55f82ae 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -66,6 +66,7 @@
#include "cli-out.h"
#include "tracepoint.h"
#include "inf-loop.h"
+#include "tui/tui.h"
extern void initialize_all_files (void);
@@ -1494,6 +1495,14 @@ quit_force (char *args, int from_tty)
int exit_code = 0;
struct qt_args qt;
+ /* Make sure that the terminal is left in the state we acquired it. */
+ target_terminal_ours ();
+#if defined(TUI)
+ tui_disable ();
+#endif
+ if (async_command_editing_p)
+ rl_deprep_terminal ();
+
/* An optional expression may be used to cause gdb to terminate with the
value of that expression. */
if (args)
--
2.5.0.rc2.22.g69b1679.dirty
next reply other threads:[~2015-07-28 3:18 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-28 3:18 Patrick Palka [this message]
2015-07-28 22:20 ` Patrick Palka
2015-07-28 23:53 ` Pedro Alves
2015-07-29 11:39 ` Patrick Palka
2015-07-29 0:09 ` Pedro Alves
2015-07-29 11:38 ` Patrick Palka
2015-07-29 12:15 ` Pedro Alves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1438053504-21507-1-git-send-email-patrick@parcs.ath.cx \
--to=patrick@parcs.ath.cx \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox