diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c0a699e2aa..7eb32ab4fd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2008-12-18 Pedro Alves + + * linux-nat.c (linux_child_follow_fork): If following the child, + and not detaching the parent, also add the child fork to the fork + list. + * linux-fork.c (linux_fork_context): Remove dead error call. + Assert that the incoming newfp argument is not null. Do not add a + new fork for inferior_ptid. Assert that there is one already. + 2008-12-16 Tristan Gingold * inflow.c: Remove old_sigio, handle_sigio, old_fcntl_flags, diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c index f80fe5fa0a..3d64922845 100644 --- a/gdb/linux-fork.c +++ b/gdb/linux-fork.c @@ -600,15 +600,14 @@ static void linux_fork_context (struct fork_info *newfp, int from_tty) { /* Now we attempt to switch processes. */ - struct fork_info *oldfp = find_fork_ptid (inferior_ptid); + struct fork_info *oldfp; ptid_t ptid; int id, i; - if (!newfp) - error (_("No such fork/process")); + gdb_assert (newfp != NULL); - if (!oldfp) - oldfp = add_fork (ptid_get_pid (inferior_ptid)); + oldfp = find_fork_ptid (inferior_ptid); + gdb_assert (oldfp != NULL); fork_save_infrun_state (oldfp, 1); remove_breakpoints (); diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index a2cb39db57..d90fb07b8b 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -857,6 +857,12 @@ linux_child_follow_fork (struct target_ops *ops, int follow_child) if (!fp) fp = add_fork (parent_pid); fork_save_infrun_state (fp, 0); + + /* Also add an entry for the child fork. */ + fp = find_fork_pid (child_pid); + if (!fp) + fp = add_fork (child_pid); + fork_save_infrun_state (fp, 0); } else target_detach (NULL, 0);