From: Daniel Jacobowitz <drow@false.org>
To: John Fodor <john_fodor@mac.com>
Cc: gdb@sourceware.org
Subject: Re: gdb and multi-threaded (NPTL) programs
Date: Fri, 24 Mar 2006 20:27:00 -0000 [thread overview]
Message-ID: <20060324201526.GA26907@nevyn.them.org> (raw)
In-Reply-To: <44244F1F.6030108@mac.com>
On Fri, Mar 24, 2006 at 02:57:19PM -0500, John Fodor wrote:
> "There is an unfortunate side effect. If one thread stops for a
> breakpoint, or for some other reason, and another thread is blocked in a
> system call, then the system call may return prematurely. This is a
> consequence of the interaction between multiple threads and the signals
> that GDB uses to implement breakpoints and other events that stop
> execution.
Really, in my opinion, it's a kernel bug; the syscall should
automatically restart in this case. Some syscalls now do that, on
current kernels. Others don't. It's hard to fix this without breaking
them in other ways.
In this case the syscall is sys_futex. When interrupted, futex_wait
returns -EINTR. This is documented to happen whether the signal was
handled or not. Maybe adding a fifth signal restart option to the
existing four in the Linux kernel could fix this: ERESTARTNOSIGNAL.
That wouldn't be hard to implement if you want to try it. You'd have
to do some thinking about the semantics of futexes to make sure it was
safe.
> Hmmm... so people who use POSIX threads have to put every syscall into a
> loop, ignoring EINTR? What if it's a real timeout? Sorry this does not
> seem reasonable to me.
Let's be precise here: "what if it's a real signal". sem_wait does not
time out. sem_timedwait returns ETIMEDOUT, not EINTR, for timeouts.
> Will there be a fix in the future to this unfortunate side-effect? How
> do NPTL programmers single-step their programs today? Using syscalls in
> loops? Using a different debugger?
In practice this does not bother most programmers. If your application
uses signals, it often needs to do this anyway!
--
Daniel Jacobowitz
CodeSourcery
next prev parent reply other threads:[~2006-03-24 20:15 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-24 20:24 John Fodor
2006-03-24 20:27 ` Daniel Jacobowitz [this message]
2006-03-24 20:52 ` John Fodor
2006-03-24 21:07 ` Daniel Jacobowitz
2006-03-24 20:40 ` Andreas Schwab
2006-03-24 20:45 ` Eric Desjardins
2006-03-24 20:47 ` Andreas Schwab
2006-03-24 21:15 ` John Fodor
2006-03-24 21:21 ` Andreas Schwab
2006-03-28 9:33 ` Jim Blandy
2006-03-28 10:43 ` Daniel Jacobowitz
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=20060324201526.GA26907@nevyn.them.org \
--to=drow@false.org \
--cc=gdb@sourceware.org \
--cc=john_fodor@mac.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