This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]