detach in all-stop with threads running
authorPedro Alves <pedro@palves.net>
Mon, 11 Jan 2021 20:01:58 +0000 (20:01 +0000)
committerPedro Alves <pedro@palves.net>
Wed, 3 Feb 2021 01:15:19 +0000 (01:15 +0000)
commit408f66864a1a823591b26420410c982174c239a2
treeebca2b15942730a15f70b27dcb4b54b6c69eac24
parentac7d717c1eb2421d64135ef0e6cf19de74b8d5d3
detach in all-stop with threads running

A following patch will add a testcase that has a number of threads
constantly stepping over a breakpoint, and then has GDB detach the
process, while threads are running.  If we have more than one inferior
running, and we detach from just one of the inferiors, we expect that
the remaining inferior continues running.  However, in all-stop, if
GDB needs to pause the target for the detach, nothing is re-resuming
the other inferiors after the detach.  "info threads" shows the
threads as running, but they really aren't.  This fixes it.

gdb/ChangeLog:

* infcmd.c (detach_command): Hold strong reference to target, and
if all-stop on entry, restart threads on exit.
* infrun.c (switch_back_to_stepped_thread): Factor out bits to ...
(restart_stepped_thread): ... this new function.  Also handle
trap_expected.
(restart_after_all_stop_detach): New function.
* infrun.h (restart_after_all_stop_detach): Declare.
gdb/ChangeLog
gdb/infcmd.c
gdb/infrun.c
gdb/infrun.h