diff options
author | Pedro Alves <palves@redhat.com> | 2009-05-19 02:46:45 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-05-19 02:46:45 +0000 |
commit | 191c4426c1ffa97a8b818c4d4280eb095de811eb (patch) | |
tree | 203f7583b1947c4f3066132d534b7fe7f3e604b4 /gdb/inflow.c | |
parent | b523320162a0e6d398ef6ebb000f9badeaa9663a (diff) | |
download | gdb-191c4426c1ffa97a8b818c4d4280eb095de811eb.zip gdb-191c4426c1ffa97a8b818c4d4280eb095de811eb.tar.gz gdb-191c4426c1ffa97a8b818c4d4280eb095de811eb.tar.bz2 |
* fork-child.c: Don't include frame.h. Include terminal.h.
(fork_inferior): Call new_tty_postfork after forking adn adding
the child to the inferior list.
* inferior.h (new_tty_prefork, gdb_has_a_terminal): Don't declare
here.
* inflow.c (struct terminal_info): Remove const qualifier from
`run_terminal' field.
(inferior_thisrun_terminal): Tweak comment.
(inflow_inferior_exit): Release the `run_terminal' field.
(copy_terminal_info): New function.
(new_tty_postfork): New function.
* terminal.h (new_tty_prefork, new_tty, new_tty_postfork,
(copy_terminal_info, gdb_has_a_terminal, gdb_setpgid): Declare.
* inf-ptrace.c: Include terminal.h.
(inf_ptrace_follow_fork): Copy the parent's terminal info to the
child.
* linux-nat.c: Include terminal.h.
(linux_child_follow_fork): Copy the parent's terminal info to the
child.
* inf-ttrace.c: Include terminal.h.
(inf_ttrace_follow_fork): Copy the parent's terminal info to the
child.
Diffstat (limited to 'gdb/inflow.c')
-rw-r--r-- | gdb/inflow.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/gdb/inflow.c b/gdb/inflow.c index bf2de0c..f65b9c5 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -67,7 +67,7 @@ struct terminal_info { /* The name of the tty (from the `tty' command) that we gave to the inferior when it was started. */ - const char *run_terminal; + char *run_terminal; /* TTY state. We save it whenever the inferior stops, and restore it when it resumes. */ @@ -109,9 +109,9 @@ static void (*sigquit_ours) (); /* The name of the tty (from the `tty' command) that we're giving to the inferior when starting it up. This is only (and should only - be) used as a transient global by new_tty_prefork, new_tty and - create_tty_session, called from fork_inferior, while forking a new - child. */ + be) used as a transient global by new_tty_prefork, + create_tty_session, new_tty and new_tty_postfork, all called from + fork_inferior, while forking a new child. */ static const char *inferior_thisrun_terminal; /* Nonzero if our terminal settings are in effect. Zero if the @@ -485,11 +485,20 @@ inflow_inferior_exit (int pid) { struct inferior *inf = find_inferior_pid (pid); + xfree (inf->terminal_info->run_terminal); xfree (inf->terminal_info); inf->terminal_info = NULL; } void +copy_terminal_info (struct inferior *to, struct inferior *from) +{ + *to->terminal_info = *from->terminal_info; + if (from->terminal_info->run_terminal) + to->terminal_info->run_terminal = from->terminal_info->run_terminal; +} + +void term_info (char *arg, int from_tty) { target_terminal_info (arg, from_tty); @@ -668,6 +677,24 @@ new_tty (void) close (tty); #endif /* !go32 && !win32 */ } + +/* NEW_TTY_POSTFORK is called after forking a new child process, and + adding it to the inferior table, to store the TTYNAME being used by + the child, or null if it sharing the terminal with gdb. */ + +void +new_tty_postfork (void) +{ + /* Save the name for later, for determining whether we and the child + are sharing a tty. */ + + if (inferior_thisrun_terminal) + current_inferior ()->terminal_info->run_terminal + = xstrdup (inferior_thisrun_terminal); + + inferior_thisrun_terminal = NULL; +} + /* Kill the inferior process. Make us have no inferior. */ |