* gdbserver leaves the terminal without a foreground group
@ 2006-08-03 7:04 Richard Sandiford
2006-08-08 15:51 ` Daniel Jacobowitz
0 siblings, 1 reply; 2+ messages in thread
From: Richard Sandiford @ 2006-08-03 7:04 UTC (permalink / raw)
To: gdb-patches
[This is a resend, sorry; it looks like yesterday's attempt didn't
get through. I've tweaked the wording a little in case the first
version was spam-filtered.]
This patch fixes the problem described here:
http://www.cygwin.com/ml/gdb/2003-08/msg00037.html
namely, gdbserver leaves the terminal without a foreground group.
This is usually harmless on shells with job control, as the shell will
put itself back into the foreground, but it causes shells like busybox's
msh to exit.
The patch makes gdbserver restore the original foreground group on exit.
Tested on m68k-uclinux. OK to install?
Richard
gdb/gdbserver/
* server.c (terminal_fd): New variable.
(old_foreground_pgrp): Likewise.
(restore_old_foreground_pgrp): New function.
(start_inferior): Record the terminal file descriptor in terminal_fd
and its original foreground group in old_foreground_pgrp. Register
restore_old_foreground_pgrp with atexit().
Index: gdb/gdbserver/server.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.c,v
retrieving revision 1.38
diff -u -p -r1.38 server.c
--- gdb/gdbserver/server.c 27 Jul 2006 00:06:12 -0000 1.38
+++ gdb/gdbserver/server.c 2 Aug 2006 14:43:15 -0000
@@ -45,6 +45,22 @@ jmp_buf toplevel;
unsigned long signal_pid;
+#ifdef SIGTTOU
+/* A file descriptor for the controlling terminal. */
+int terminal_fd;
+
+/* TERMINAL_FD's original foreground group. */
+pid_t old_foreground_pgrp;
+
+/* Hand back terminal ownership to the original foreground group. */
+
+static void
+restore_old_foreground_pgrp (void)
+{
+ tcsetpgrp (terminal_fd, old_foreground_pgrp);
+}
+#endif
+
static int
start_inferior (char *argv[], char *statusptr)
{
@@ -62,7 +78,10 @@ start_inferior (char *argv[], char *stat
#ifdef SIGTTOU
signal (SIGTTOU, SIG_IGN);
signal (SIGTTIN, SIG_IGN);
- tcsetpgrp (fileno (stderr), signal_pid);
+ terminal_fd = fileno (stderr);
+ old_foreground_pgrp = tcgetpgrp (terminal_fd);
+ tcsetpgrp (terminal_fd, signal_pid);
+ atexit (restore_old_foreground_pgrp);
#endif
/* Wait till we are at 1st instruction in program, return signal number. */
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: gdbserver leaves the terminal without a foreground group
2006-08-03 7:04 gdbserver leaves the terminal without a foreground group Richard Sandiford
@ 2006-08-08 15:51 ` Daniel Jacobowitz
0 siblings, 0 replies; 2+ messages in thread
From: Daniel Jacobowitz @ 2006-08-08 15:51 UTC (permalink / raw)
To: gdb-patches, richard
On Thu, Aug 03, 2006 at 08:04:44AM +0100, Richard Sandiford wrote:
> [This is a resend, sorry; it looks like yesterday's attempt didn't
> get through. I've tweaked the wording a little in case the first
> version was spam-filtered.]
It did, actually - I saw both.
> The patch makes gdbserver restore the original foreground group on exit.
> Tested on m68k-uclinux. OK to install?
Yes. Thanks a lot for tracking down this mysterious bug.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-08-08 15:51 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-08-03 7:04 gdbserver leaves the terminal without a foreground group Richard Sandiford
2006-08-08 15:51 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox