* linux-nat.c (linux_child_follow_fork): If following the child,
authorPedro Alves <palves@redhat.com>
Thu, 18 Dec 2008 21:35:23 +0000 (21:35 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 18 Dec 2008 21:35:23 +0000 (21:35 +0000)
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.

gdb/ChangeLog
gdb/linux-fork.c
gdb/linux-nat.c

index c0a699e..7eb32ab 100644 (file)
@@ -1,3 +1,12 @@
+2008-12-18  Pedro Alves  <pedro@codesourcery.com>
+
+       * 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  <gingold@adacore.com>
 
        * inflow.c: Remove old_sigio, handle_sigio, old_fcntl_flags,
index f80fe5f..3d64922 100644 (file)
@@ -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 ();
index a2cb39d..d90fb07 100644 (file)
@@ -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);