From: Pedro Alves <palves@redhat.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: gdb@sourceware.org
Subject: Re: Inadvertently run inferior threads
Date: Mon, 15 Jun 2015 13:18:00 -0000 [thread overview]
Message-ID: <557ED083.1060804@redhat.com> (raw)
In-Reply-To: <83ioaus6pt.fsf@gnu.org>
On 06/11/2015 02:41 PM, Eli Zaretskii wrote:
> And I have a question about your description of what happens on
> GNU/Linux. You say:
>
>> #4 - result: _new_ threads end up in "running" state, even though they
>> are stopped.
>
> My question is this: who or what stops the new threads that were
> started by the function we infcall'ed? I know who stops them on
> MS-Windows: the OS.
GDB does, from within the target's target_wait implementation.
For Linux, it's in linux-nat.c:linux_nat_wait_1:
...
/* Now stop all other LWP's ... */
iterate_over_lwps (minus_one_ptid, stop_callback, NULL);
/* ... and wait until all of them have reported back that
they're no longer running. */
iterate_over_lwps (minus_one_ptid, stop_wait_callback, NULL);
...
> Does the same happen on GNU/Linux (and other systems that support
> asynchronous execution)?
Yes. It's gdb's own code that does it, but from infrun.c's
perspective, it's the same.
> If so, I don't understand why we suppress
> the stopped <-> running transitions when in infcall. Or at least the
> running -> stopped transition. The comment in normal_stop tries to
> explain this:
Say you have a breakpoint with a condition that does an infcall, like:
int return_false (void) { return 0 };
(gdb) b somewhere_in_a_loop if return_false()
(gdb) c
From the perspective of the user, the thread is always running
after that "c". The breakpoint stops for both "somewhere_in_a_loop" and
for the infcall's dummy breakpoint are all internal run control
machinery details.
(BBL to reply to the rest.)
Thanks,
Pedro Alves
next prev parent reply other threads:[~2015-06-15 13:18 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-12 17:11 Eli Zaretskii
2015-03-14 13:40 ` Pedro Alves
2015-03-14 14:56 ` Eli Zaretskii
2015-03-14 15:36 ` Pedro Alves
2015-03-14 15:51 ` Pedro Alves
2015-03-14 15:58 ` Pedro Alves
2015-06-10 15:15 ` Eli Zaretskii
2015-03-14 16:06 ` Eli Zaretskii
2015-06-10 15:50 ` Eli Zaretskii
2015-06-11 13:42 ` Eli Zaretskii
2015-06-15 13:18 ` Pedro Alves [this message]
2015-06-15 15:27 ` Eli Zaretskii
2015-06-15 15:42 ` Pedro Alves
2015-06-23 4:07 ` Doug Evans
2015-06-23 12:19 ` Pedro Alves
2015-06-23 19:11 ` Pedro Alves
2015-06-23 19:52 ` Eli Zaretskii
2015-06-24 14:29 ` Eli Zaretskii
2015-06-29 15:57 ` Pedro Alves
2015-06-23 14:58 ` Eli Zaretskii
2015-06-15 13:01 ` Pedro Alves
2015-06-15 15:14 ` Eli Zaretskii
2015-06-15 15:28 ` Pedro Alves
2015-06-15 17:21 ` Eli Zaretskii
2015-06-15 17:56 ` Pedro Alves
2015-06-15 19:07 ` Eli Zaretskii
2015-06-23 11:51 ` Pedro Alves
2015-03-14 16:04 ` Eli Zaretskii
2015-03-14 16:15 ` Pedro Alves
2015-03-14 16:17 ` Eli Zaretskii
2015-03-14 16:23 ` Pedro Alves
2015-03-14 17:01 ` Eli Zaretskii
2015-03-14 17:46 ` Pedro Alves
2015-06-10 15:13 ` Eli Zaretskii
2015-06-15 13:08 ` Pedro Alves
2015-06-15 15:15 ` Eli Zaretskii
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=557ED083.1060804@redhat.com \
--to=palves@redhat.com \
--cc=eliz@gnu.org \
--cc=gdb@sourceware.org \
/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