Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: Michael Snyder <msnyder@vmware.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: GDB hangs on kill or quit (after following a fork child, not detaching from the parent)
Date: Thu, 18 Dec 2008 21:04:00 -0000	[thread overview]
Message-ID: <200812182103.42148.pedro@codesourcery.com> (raw)
In-Reply-To: <494AA299.60308@vmware.com>

On Thursday 18 December 2008 19:20:57, Michael Snyder wrote:

> > When there are forks involved, linux_nat_kill calls into linux_fork_killall
> > to do the killing.  But, when following a fork child, and not
> > detaching from the parent, we defer adding the child fork to the
> > list of forks (which is confusing IMHO, see below),
> 
> Do you have any intuition as to why we did that?
> I don't remember.  Could it have been related to the
> checkpoint case?
> 
> Otherwise it could simply have been an oversight...

Yeah, I should have mentioned it before:  At first I also
thought it was checkpoints related, then I noticed that
when 'set follow-fork-mode' is child, checkpoints are broken
for other reasons.  It may well be that it always was (broken):

gdb-6.8:

 (top-gdb) set follow-fork-mode child
 (top-gdb) start
 Breakpoint 3 at 0x4509a7: file ../../src/gdb/gdb.c, line 28.
 Starting program: /home/pedro/gdb/baseline/build/gdb/gdb
 [Thread debugging using libthread_db enabled]
 [New Thread 0x7ffff7fd36e0 (LWP 24392)]
 [Switching to Thread 0x7ffff7fd36e0 (LWP 24392)]
 main (argc=1, argv=0x7fffffffe3f8) at ../../src/gdb/gdb.c:28
 28        memset (&args, 0, sizeof args);
 (top-gdb) checkpoint
 warning: Can't attach process 24400: Operation not permitted
 /build/buildd/gdb-6.8/gdb/linux-thread-db.c:302: internal-error: thread_get_info_callback: Assertion `thread_info != NULL' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n)  

HEAD:

 (top-gdb) start
 Temporary breakpoint 3 at 0x4509a7: file ../../src/gdb/gdb.c, line 28.
 Starting program: /home/pedro/gdb/baseline/build/gdb/gdb
 [Thread debugging using libthread_db enabled]

 Temporary breakpoint 3, main (argc=
 During symbol reading, incomplete CFI data; unspecified registers (e.g., rax) at 0x45099c.
 1, argv=0x7fffffffe3f8) at ../../src/gdb/gdb.c:28
 28        memset (&args, 0, sizeof args);
 (top-gdb) set follow-fork-mode child
 (top-gdb) checkpoint
 [Switching to Thread 0x7ffff7fd36e0 (LWP 24520)]
 ../../src/gdb/regcache.c:359: internal-error: regcache_cpy_no_passthrough: Assertion `src != NULL && dst != NULL' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) 

( this one is related to the fact that moving the infrun context
from the parent to the child isn't complete, so not completelly
checkpoints related... )

Notice that the checkpoints test never sets
follow-fork-mode to child, so this patch can't affect it.

I think that when checkpointing, we should always "follow"
the parent anyway; and that the checkpoints support should be
better insulated from the multi forks support, so that the
multi-forks support can grow into full multi-process support.

> I like your results, and your code changes look fine.
> Can you confirm that it doesn't adversely affect the
> checkpoint testsuites?

Yep, had done that.  No regressions in the checkpoints tests, or in
the rest of the testsuite.

I'll go check it in then.

Thanks!

-- 
Pedro Alves


  reply	other threads:[~2008-12-18 21:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-12 21:14 Pedro Alves
2008-12-18 19:26 ` Michael Snyder
2008-12-18 21:04   ` Pedro Alves [this message]
2008-12-18 21:26     ` Pedro Alves
2008-12-18 21:47     ` Michael Snyder
2008-12-19  5:17 ` teawater

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200812182103.42148.pedro@codesourcery.com \
    --to=pedro@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    --cc=msnyder@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox