]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
Don't resume new threads if scheduler-locking is in effect
authorPedro Alves <pedro@palves.net>
Tue, 30 Nov 2021 19:52:11 +0000 (19:52 +0000)
committerPedro Alves <pedro@palves.net>
Mon, 18 Jul 2022 16:33:32 +0000 (17:33 +0100)
commitc96ff78049ba7e05bbb58a019c9388dbc3414280
treef83b671ce48b6136698e3090a2552571ea2a0feb
parent544bcc3ac8358ad6f09f822772142fac886a030a
Don't resume new threads if scheduler-locking is in effect

If scheduler-locking is in effect, like e.g., with "set
scheduler-locking on", and you step over a function that spawns a new
thread, the new thread is allowed to run free, at least until some
event is hit, at which point, whether the new thread is re-resumed
depends on a number of seemingly random factors.  E.g., if the target
is all-stop, and the parent thread hits a breakpoint, and gdb decides
the breakpoint isn't interesting to report to the user, then the
parent thread is resumed, but the new thread is left stopped.

I think that letting the new threads run with scheduler-locking
enabled is a defect.  This commit fixes that, making use of the new
clone events on Linux, and of target_thread_events() on targets where
new threads have no connection to the thread that spawned them.

Testcase and documentation changes included.

Change-Id: Ie12140138b37534b7fc1d904da34f0f174aa11ce
gdb/NEWS
gdb/doc/gdb.texinfo
gdb/infrun.c
gdb/testsuite/gdb.threads/schedlock-new-thread.c [new file with mode: 0644]
gdb/testsuite/gdb.threads/schedlock-new-thread.exp [new file with mode: 0644]