| Index: gdb/inflow.c
|
| diff --git a/gdb/inflow.c b/gdb/inflow.c
|
| index 711b2aa626d1033a9d3ae1fa6fad5ebb8893b57c..062bf68294748236f003a0de4047314cded2d037 100644
|
| --- a/gdb/inflow.c
|
| +++ b/gdb/inflow.c
|
| @@ -1,5 +1,5 @@
|
| /* Low level interface to ptrace, for GDB when running under Unix.
|
| - Copyright (C) 1986-1996, 1998-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 1986-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -26,7 +26,7 @@
|
| #include "gdbthread.h"
|
| #include "observer.h"
|
|
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
| #include <signal.h>
|
| #include <fcntl.h>
|
| #include "gdb_select.h"
|
| @@ -217,19 +217,22 @@ static void terminal_ours_1 (int);
|
| void
|
| terminal_init_inferior_with_pgrp (int pgrp)
|
| {
|
| + struct inferior *inf = current_inferior ();
|
| + struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
| +
|
| +#ifdef PROCESS_GROUP_TYPE
|
| + /* Store the process group even without a terminal as it is used not
|
| + only to reset the tty foreground process group, but also to
|
| + interrupt the inferior. */
|
| + tinfo->process_group = pgrp;
|
| +#endif
|
| +
|
| if (gdb_has_a_terminal ())
|
| {
|
| - struct inferior *inf = current_inferior ();
|
| - struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
| -
|
| xfree (tinfo->ttystate);
|
| tinfo->ttystate = serial_copy_tty_state (stdin_serial,
|
| our_terminal_info.ttystate);
|
|
|
| -#ifdef PROCESS_GROUP_TYPE
|
| - tinfo->process_group = pgrp;
|
| -#endif
|
| -
|
| /* Make sure that next time we call terminal_inferior (which will be
|
| before the program runs, as it needs to be), we install the new
|
| process group. */
|
| @@ -261,7 +264,7 @@ terminal_init_inferior (void)
|
| (and the non-threaded child_terminal_init_inferior can just pass in
|
| inferior_ptid to the same routine). */
|
| /* We assume INFERIOR_PID is also the child's process group. */
|
| - terminal_init_inferior_with_pgrp (PIDGET (inferior_ptid));
|
| + terminal_init_inferior_with_pgrp (ptid_get_pid (inferior_ptid));
|
| #endif /* PROCESS_GROUP_TYPE */
|
| }
|
|
|
| @@ -484,15 +487,11 @@ static const struct inferior_data *inflow_inferior_data;
|
| static void
|
| inflow_inferior_data_cleanup (struct inferior *inf, void *arg)
|
| {
|
| - struct terminal_info *info;
|
| + struct terminal_info *info = arg;
|
|
|
| - info = inferior_data (inf, inflow_inferior_data);
|
| - if (info != NULL)
|
| - {
|
| - xfree (info->run_terminal);
|
| - xfree (info->ttystate);
|
| - xfree (info);
|
| - }
|
| + xfree (info->run_terminal);
|
| + xfree (info->ttystate);
|
| + xfree (info);
|
| }
|
|
|
| /* Get the current svr4 data. If none is found yet, add it now. This
|
| @@ -563,7 +562,7 @@ term_info (char *arg, int from_tty)
|
| }
|
|
|
| void
|
| -child_terminal_info (char *args, int from_tty)
|
| +child_terminal_info (const char *args, int from_tty)
|
| {
|
| struct inferior *inf;
|
| struct terminal_info *tinfo;
|
| @@ -766,7 +765,7 @@ static void
|
| pass_signal (int signo)
|
| {
|
| #ifndef _WIN32
|
| - kill (PIDGET (inferior_ptid), SIGINT);
|
| + kill (ptid_get_pid (inferior_ptid), SIGINT);
|
| #endif
|
| }
|
|
|
| @@ -925,5 +924,5 @@ input settings."),
|
| observer_attach_inferior_exit (inflow_inferior_exit);
|
|
|
| inflow_inferior_data
|
| - = register_inferior_data_with_cleanup (inflow_inferior_data_cleanup);
|
| + = register_inferior_data_with_cleanup (NULL, inflow_inferior_data_cleanup);
|
| }
|
|
|