[RFA] Checkpoint: wait the defunct process when delete it
Hui Zhu
teawater@gmail.com
Mon May 17 06:41:00 GMT 2010
On Fri, May 14, 2010 at 23:08, Pedro Alves <pedro@codesourcery.com> wrote:
> 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.
>
At this time, "find_thread_ptid (pptid) && is_stopped (pptid)" this
line will handle it.
Thanks,
Hui
More information about the Gdb-patches
mailing list