This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] Checkpoint: wait the defunct process when delete it
Thanks Hui,
On Friday 14 May 2010 15:43:23, Hui Zhu wrote:
> + pptid = fi->parent_ptid;
>
> if (from_tty)
> printf_filtered (_("Killed %s\n"), target_pid_to_str (ptid));
> @@ -507,10 +512,10 @@ Please switch to another checkpoint befo
> list, waitpid the ptid.
> If fi->parent_ptid is a part of lwp and it is stoped, waitpid the
> ptid. */
> - if ((!find_thread_ptid (fi->parent_ptid) && find_fork_ptid (fi->parent_ptid))
> - || (find_thread_ptid (fi->parent_ptid) && is_stopped (fi->parent_ptid)))
> + if ((!find_thread_ptid (pptid) && find_fork_ptid (pptid))
Sorry, but is still not correct. When you end up with only one fork
in the checkpoint list, delete_fork will delete it as well. For
example:
(gdb) checkpoint
at this point, you have two checkpoints, checkpoint 1 (the forked child),
and checkpoint 0, the inferior you were already debugging. When you
delete the new checkpoint 1, with:
(gdb) delete checkpoint 1
delete_fork will also delete checkpoint 0, the parent of checkpoint 1.
(see the "Special case:" comment in delete_fork), so your
find_fork_ptid(pptid) here will be too late.
--
Pedro Alves