From: Daniel Jacobowitz <drow@false.org>
To: Jeff Johnston <jjohnstn@redhat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFC]: fix for recycled thread ids
Date: Wed, 24 Mar 2004 15:51:00 -0000 [thread overview]
Message-ID: <20040324155130.GA27748@nevyn.them.org> (raw)
In-Reply-To: <405B66F4.4090101@redhat.com>
On Fri, Mar 19, 2004 at 04:32:36PM -0500, Jeff Johnston wrote:
>
>
> Daniel Jacobowitz wrote:
> >On Fri, Mar 19, 2004 at 02:35:40PM -0500, Jeff Johnston wrote:
> >
> >>>Conceptually, we attach to LWPs, not to threads. That suggests to me
> >>>that the correct fix is to ask the LWP layer if the LWP is attached
> >>>rather than looking it up in the thread list in the first place.
> >>>We've already got an appropriate list of LWPs though we might need a
> >>>new accessor.
> >>>
> >>
> >>I like that idea. We still have to deal with the bogus thread list
> >>entry. The routine prune_threads calls thread_db_alive and it won't
> >>realize the thread info it has is bogus because it will find the tid is
> >>valid.
> >
> >
> >Do you think this will be a problem? My hope is that it will just look
> >as if the thread has 'migrated' to a new LWP.
> >
>
> It will have invalid state associated with it. For example, the thread
> info has a prev_pc field. As to all the havoc that the state may or may
> not cause, I think it would be a very good idea to clean it up now. Who's
> to say what state will be added to thread_info in the future.
It turns out that this is not only a problem, but the whole problem.
Could you run this test under GDB, on RHEL, using strace? Tell me
whether or not you see WIFEXITED results for every thread as it exits.
I was assuming you did not, but I can reproduce the misbehavior here
even though I do get them.
The problem is that we get the LWP death events, but we treat the
threads and LWPs as completely independent sets. We never find out
that the threads have died.
We don't enable thread death event reporting, because in glibc 2.1.3
there was a bug in the death reporting which would cause the debugged
program to segfault:
#if 0
/* FIXME: kettenis/2000-04-23: The event reporting facility is
broken for TD_DEATH events in glibc 2.1.3, so don't enable it for
now. */
td_event_addset (&events, TD_DEATH);
#endif
Fortunately, in <gnu/libc-version.h> there is a function to return the
runtime version of glibc. We should be able to use that - and the not
100% valid, but generally valid and already assumed by thread_db,
assumption that a native GDB, when used to debug native programs, is
debugging the same version of the C library - to enable TD_DEATH when
it is safe to do so. This will let us detach the threads when they
die.
That has its own risks, since the thread continues to run for a short
while after the death event is reported. For instance, in NPTL the
thread reports the event and then cleans up after itself; in LT I don't
remember whether the manager or the thread does this, but I think it's
the same. I already wrote limited code to handle this, if you search
for "zombie" in thread-db.c, so it should be OK. The gist is that we
remove it from the thread list right away, but do not detach the
thread. We resist attaching to zombies.
At least, all that is how it looks to me. I'll experiment with
TD_DEATH before I speculate further.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
next prev parent reply other threads:[~2004-03-24 15:51 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-19 0:36 Jeff Johnston
2004-03-19 1:53 ` Daniel Jacobowitz
2004-03-19 18:44 ` Jeff Johnston
2004-03-19 19:01 ` Daniel Jacobowitz
2004-03-19 19:35 ` Jeff Johnston
2004-03-19 19:40 ` Daniel Jacobowitz
2004-03-19 21:32 ` Jeff Johnston
2004-03-24 15:51 ` Daniel Jacobowitz [this message]
2004-03-24 16:56 ` Daniel Jacobowitz
2004-03-24 21:56 ` Jeff Johnston
2004-03-25 0:46 ` Jeff Johnston
2004-03-25 4:39 ` Daniel Jacobowitz
2004-03-25 16:34 ` Daniel Jacobowitz
2004-03-25 20:22 ` Jeff Johnston
2004-03-26 17:59 ` [patch] Use TD_DEATH and PTRACE_EVENT_CLONE when available (was: Re: [RFC]: fix for recycled thread ids) Daniel Jacobowitz
2004-03-26 18:14 ` [patch] Use TD_DEATH and PTRACE_EVENT_CLONE when available Jeff Johnston
2004-03-26 21:13 ` [patch] New thread test to exercise Daniel's Patch Jeff Johnston
2004-03-26 21:19 ` Daniel Jacobowitz
2004-03-29 18:06 ` Jeff Johnston
2004-03-29 18:11 ` Daniel Jacobowitz
2004-03-29 20:18 ` Jeff Johnston
2004-03-29 20:42 ` Daniel Jacobowitz
2004-03-29 21:04 ` Jeff Johnston
2004-03-29 21:34 ` Daniel Jacobowitz
2004-03-29 21:59 ` Jeff Johnston
2004-03-29 22:32 ` Daniel Jacobowitz
2004-03-29 22:58 ` Jeff Johnston
2004-03-29 23:57 ` Daniel Jacobowitz
2004-03-29 18:07 ` [patch] Use TD_DEATH and PTRACE_EVENT_CLONE when available (was: Re: [RFC]: fix for recycled thread ids) Daniel Jacobowitz
2004-03-19 20:33 ` [RFC]: fix for recycled thread ids Andrew Cagney
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=20040324155130.GA27748@nevyn.them.org \
--to=drow@false.org \
--cc=gdb-patches@sources.redhat.com \
--cc=jjohnstn@redhat.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