Fix handle_no_resumed w/ multiple targets
authorPedro Alves <pedro@palves.net>
Mon, 6 Jul 2020 19:02:49 +0000 (20:02 +0100)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 8 Jul 2020 18:19:08 +0000 (14:19 -0400)
commit2ec0f7ffc6f644100b432352e90ce0e4e71d81e3
tree915015b5b442cd273e7a003dd217aed8fa810556
parent0e2dba2d6d367b23ec744b95f2189482f4e4b188
Fix handle_no_resumed w/ multiple targets

handle_no_resumed is currently not considering multiple targets.

Say you have two inferiors 1 and 2, each connected to a different
target, A and B.

Now say you set inferior 2 running, with "continue &".

Now you select a thread of inferior 1, say thread 1.2, and continue in
the foreground.  All other threads of inferior 1 are left stopped.
Thread 1.2 exits, and thus target A has no other resumed thread, so it
reports TARGET_WAITKIND_NO_RESUMED.

At this point, if both inferiors were running in the same target,
handle_no_resumed would realize that threads of inferior 2 are still
executing, so the TARGET_WAITKIND_NO_RESUMED event should be ignored.
But because handle_no_resumed only walks the threads of the current
target, it misses noticing that threads of inferior 2 are still
executing.  The fix is just to walk over all threads of all targets.

A testcase covering the use case above will be added in a following
patch.  It can't be added yet because it depends on yet another fix to
handle_no_resumed not included here.

gdb/ChangeLog:

PR gdb/26199
* infrun.c (handle_no_resumed): Handle multiple targets.
gdb/infrun.c
This page took 0.023895 seconds and 4 git commands to generate.