From: Jeff Johnston <jjohnstn@redhat.com>
To: Daniel Jacobowitz <drow@false.org>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFC]: fix for recycled thread ids
Date: Fri, 19 Mar 2004 19:35:00 -0000 [thread overview]
Message-ID: <405B4B8C.2060801@redhat.com> (raw)
In-Reply-To: <20040319190126.GA16950@nevyn.them.org>
Daniel Jacobowitz wrote:
> On Fri, Mar 19, 2004 at 01:44:19PM -0500, Jeff Johnston wrote:
>
>>Daniel Jacobowitz wrote:
>>
>>>On Thu, Mar 18, 2004 at 07:36:25PM -0500, Jeff Johnston wrote:
>>>
>>>
>>>>The following patch fixes a problem when a user application creates a
>>>>thread shortly after another thread has completed. For nptl, thread ids
>>>>are addresses. If a thread completes/dies, the tid is available for reuse
>>>>by a new thread.
>>>
>>>
>>>Does NPTL re-use the TID quickly, or cycle around the way LT did so
>>>that we only see this under high thread pressure?
>>>
>>
>>I can't say for sure as I don't maintain libthread_db. The test case in
>>question does create high thread pressure, but I think it would be a
>>mistake to generalize and think that this couldn't happen in an existing
>>application.
>
>
> I know you don't maintain NPTL, but this is the sort of question that
> we need to understand before we can fix the problem correctly. I see
> that you've attached a testcase, so I'll take a look at it when I get
> back from my trip on Monday.
>
Ok, thanks.
>
>>>>On RH9 and RHEL3, nptl threads do not have exit events associated with
>>>>them. I have already discussed this with Daniel J. who feels that the
>>>>kernels are not doing the right thing, but regardless, the current and
>>>>previous RH nptl kernels are behaving this way and gdb needs to handle
>>>>it. As such, when a new thread is created, if it is reusing the tid of a
>>>>previous thread that gdb hasn't figured out isn't around any more, gdb
>>>>ignores the create event and the new thread is not added. Ignoring the
>>>>event is done because it is possible for gdb to find out about the thread
>>>>before it's creation event is reported and so the create event can be
>>>>redundant information.
>>>
>>>
>>>What I haven't seen a good explanation of is what problem this causes.
>>>If a thread goes away, and then a new thread using the same ID is
>>>created, and then we stop, what do we lose besides the cosmetic fact
>>>that there is no [New Thread] message? Does anything go wrong?
>>>
>>>Also, I would like the issue of whether or not it is a kernel bug
>>>resolved before we discuss working around it in GDB.
>>>
>>
>>The problem is if a global signal is passed on to the inferior program when
>>there are threads we have not attached to, the process terminates. A
>>Ctrl-C is such a signal. In the example program, we only attach to the
>>first 100 threads and when the Ctrl-C is issued, we get:
>>
>>ptrace: No such process.
>>thread_db_get_info: cannot get thread info: generic error
>>
>>The end-user is cooked.
>
>
> OK. So what you're saying is, the problem is that we do not see that
> the new thread has been created, so we do not attach to it. Is that
> right?
>
Yes.
> 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.
>
>>Regarding resolving this issue as a kernel error, any fix for RHEL3 won't
>>get shipped until Update 3. I know of no scheduled update for RH9 and this
>>would not qualify as a security update.
>
>
> That's not what I said - I don't care whether an update is published
> for any particular vendor's product. I want us to understand whether
> we are working around a kernel bug or fixing an actual bug in GDB.
> That's another part of the problem that we need to understand in order
> to fix it correctly.
>
> As the author of the kernel code in question, I think that it's a
> kernel bug. Roland seemed to agree.
>
>
>>Would it make sense to rename thread-db.c to lin-thread-db.c?
>
>
> Probably not, but some explanatory comments may be in order.
>
next prev parent reply other threads:[~2004-03-19 19:35 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 [this message]
2004-03-19 19:40 ` Daniel Jacobowitz
2004-03-19 21:32 ` Jeff Johnston
2004-03-24 15:51 ` Daniel Jacobowitz
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=405B4B8C.2060801@redhat.com \
--to=jjohnstn@redhat.com \
--cc=drow@false.org \
--cc=gdb-patches@sources.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