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); |
} |