gdb/gdbserver/
authorRichard Sandiford <rdsandiford@googlemail.com>
Tue, 8 Aug 2006 16:03:29 +0000 (16:03 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Tue, 8 Aug 2006 16:03:29 +0000 (16:03 +0000)
* 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().

gdb/gdbserver/ChangeLog
gdb/gdbserver/server.c

index 220c19b31093008065346e9dd0d17c1183681e1a..a5a735a12162c3c0fba0fc546299092d3dcdd267 100644 (file)
@@ -1,3 +1,12 @@
+2006-08-08  Richard Sandiford  <richard@codesourcery.com>
+
+       * 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().
+
 2006-07-26  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * server.c (handle_query): Correct qPart to qXfer.
index 5fbe0f7f414366108e5b0df690ea7904809968ac..c30a61a25e1e0278b57b8591bfb69dfdfbd1b658 100644 (file)
@@ -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 *statusptr)
 #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.  */