[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