From: Pedro Alves <palves@redhat.com>
To: Simon Marchi <simon.marchi@ericsson.com>, gdb-patches@sourceware.org
Cc: Antoine Tremblay <antoine.tremblay@ericsson.com>
Subject: Re: [PATCH master+7.12 v2 3/3] Add test for user context selection sync
Date: Wed, 14 Sep 2016 19:31:00 -0000 [thread overview]
Message-ID: <bcfdd3ef-e833-49a3-2ff3-01cbcbb0da1a@redhat.com> (raw)
In-Reply-To: <20160914174548.5873-4-simon.marchi@ericsson.com>
Hi Simon,
I didn't try to understand everything in detail, but overall
it looks very nice now. Thank you very much. A few comments below.
On 09/14/2016 06:45 PM, Simon Marchi wrote:
> From: Antoine Tremblay <antoine.tremblay@ericsson.com>
>
> This patch adds a test to verify that events are sent properly to all
> UIs when the user selection context (inferior, thread, frame) changes.
>
> The goal of the C test file is to provide two threads that are
> interrupted with the same predictable backtrace (so that we can test
> frame switching). This is achieved by having them loop on a single
> line, such that when the main thread hits a breakpoint, they are both
> stopped that line. It would not be practical to have the threads sleep,
> since their backtraces would not be predictable (the functions that
> implement sleep may vary between systems).
>
> There is a 1 second sleep in the main thread to make sure the threads
> have time to spawn and reach the loop. If you can find a way that is
> sleep-free and race-free to achieve the same result, it would be really
> nice, as most of the time taken by the test is spent sleeping.
Did you try using barriers and breakpoints? Several tests use that
to make sure threads are past a point.
> +int
> +main (void)
> +{
> + int i = 0;
> + pthread_t threads[NUM_THREADS];
> +
> + for (i = 0; i < NUM_THREADS; i++)
> + pthread_create (&threads[i], NULL, child_function, NULL);
> +
> + /* Leave enough time for the threads to reach their infinite loop. */
> + sleep (1);
> +
> + i = 0; /* main break line */
> +
> + sleep (2);
> +
> + /* Allow the test to exit cleanly. */
> + quit = 1;
> +
> + for (i = 0; i < NUM_THREADS; i++)
> + pthread_join (threads[i], NULL);
Hmm, looks like this version of the test still runs forever.
e for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program. If not, see <http://www.gnu.org/licenses/>.
> +
> +# This test checks that thread, select-frame, frame or inferior selection
> +# events are properly sent to all uis.
This comment is talking about "select-frame", which I take is
the CLI command's name, not a selection event. It feels like the comment
could be tweaked to be a bit clearer. Something like:
# This test checks that the "thread", "select-frame", "frame" and "inferior"
# commands send the appropriate user-selection-change events to all UIs.
Maybe say something about MI commands too, if the test exercises them.
> +#
> +# This test considers the case where console and mi are two different uis
> +# and mi is created with the new-ui command.
> +#
> +# It also considers the case where the console commands are sent directly in
> +# the mi channel as described in PR 20487.
Could you do a quick skim over the test and uppercase "mi" and "ui",
as in "MI", and "UIs". IMO, that makes the comments easier to grok.
> +# Continue inferior INF until the breakpoint indicating the threads are started.
> +
> +proc test_continue_to_start { mode inf } {
> + global gdb_prompt gdb_spawn_id gdb_main_spawn_id
> +
> + if { $gdb_spawn_id != $gdb_main_spawn_id } {
> + error "This should not happen."
> + }
> +
> + with_test_prefix "inferior $inf" {
> + with_spawn_id $gdb_main_spawn_id {
> + gdb_continue_to_breakpoint "main breakpoint"
> +
> + if { $mode == "non-stop" } {
> + gdb_test "thread $inf.2" ".*" "switch to thread $inf.2"
> +
> + send_gdb "interrupt\n"
> + gdb_expect {
gdb_test_multiple ?
> + -re "Thread.*2.*stopped" {
> + pass "interrupt thread $inf.2"
> + }
> + }
> + }
> + }
> + }
> +}
> +
> +# Match a regular expression, or ensure that there was no output.
> +#
> +# If RE is non-empty, try to match the content of the program output (using the
> +# current spawn_id) and pass/fail TEST accordingly.
> +# If RE is empty, ensure that the program did not output anything.
> +
> +proc match_re_or_ensure_not_output { re test } {
> + if { $re != "" } {
> + gdb_expect {
gdb_test_multiple? Or maybe this is used by MI too?
> + -re "$re" {
> + pass $test
> + }
> +
> + default {
> + fail $test
> + }
> + }
> + } else {
> + ensure_no_output $test
> + }
> +}
> + with_test_prefix "thread 1.2 with --thread" {
> + # Test selecting a thread from MI with a --thread option. This test
> + # verifies that even if the thread GDB would switch to is the same has
> + # the thread specified with --thread, an event is still sent to CLI.
> + # In this case this is thread 1.2
> +
> + set mi_re [make_mi_re $mode 2 0 response]
> + set cli_re [make_cli_re $mode -1 1.2 0]
> +
> + with_spawn_id $mi_spawn_id {
> + mi_gdb_test "-thread-select --thread 2 2" $mi_re "-thread-select"
> + }
> +
> + with_spawn_id $gdb_main_spawn_id {
> + # TODO: it doesn't work as of now.
> + # match_re_or_ensure_not_output "$cli_re\r\n" "-thread-select, event on cli"
> + }
Is there a plan here?
--
Pedro Alves
next prev parent reply other threads:[~2016-09-14 19:31 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-14 17:46 [PATCH master+7.12 v2 0/3] Emit user selection change notifications on all UIs Simon Marchi
2016-09-14 17:46 ` [PATCH master+7.12 v2 1/3] Introduce cleanup to restore current_uiout Simon Marchi
2016-09-14 17:56 ` Pedro Alves
2016-09-15 3:24 ` Simon Marchi
2016-09-16 18:18 ` Pedro Alves
[not found] ` <0c9914b2-f012-3b59-f127-04e70a7f867a@ericsson.com>
2016-10-03 21:25 ` Simon Marchi
2016-09-14 18:11 ` Tom Tromey
2016-09-14 18:18 ` Simon Marchi
2016-09-14 18:32 ` Pedro Alves
2016-09-14 19:12 ` Tom Tromey
2016-09-15 3:17 ` Simon Marchi
2016-09-14 17:46 ` [PATCH master+7.12 v2 3/3] Add test for user context selection sync Simon Marchi
2016-09-14 19:31 ` Pedro Alves [this message]
2016-09-16 2:02 ` Simon Marchi
2016-09-21 16:43 ` Pedro Alves
2016-09-21 21:38 ` Simon Marchi
2016-09-22 1:56 ` Simon Marchi
2016-09-14 17:46 ` [PATCH master+7.12 v2 2/3] Emit inferior, thread and frame selection events to all UIs Simon Marchi
2016-09-14 18:30 ` Pedro Alves
2016-09-15 16:21 ` Simon Marchi
2016-09-16 18:26 ` Pedro Alves
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=bcfdd3ef-e833-49a3-2ff3-01cbcbb0da1a@redhat.com \
--to=palves@redhat.com \
--cc=antoine.tremblay@ericsson.com \
--cc=gdb-patches@sourceware.org \
--cc=simon.marchi@ericsson.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