Re: Inadvertently run inferior threads
Eli Zaretskii <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
> Date: Sat, 14 Mar 2015 15:58:49 +0000 > From: Pedro Alves <[email protected]> > CC: [email protected] > > On 03/14/2015 03:50 PM, Pedro Alves wrote: > > >> Calling a function that ends up starting new threads should > >> work OK, but indeed that seems to be broken... > >> > >> On GNU/Linux, and a trivial program with: > >> > >> ~~~ > >> void > >> start_thread (void) > >> { > >> pthread_t thread; > >> > >> pthread_create (&thread, NULL, thread_function, NULL); > >> } > >> ~~~ > >> > >> results in: > >> > >> (gdb) p start_thread () > >> [New Thread 0x7ffff7fc1700 (LWP 9903)] > >> $1 = void > >> (gdb) info threads > >> Id Target Id Frame > >> 2 Thread 0x7ffff7fc1700 (LWP 9903) "start-thread-in" (running) > >> * 1 Thread 0x7ffff7fc2740 (LWP 9899) "start-thread-in" main () at start-thread-infcall.c:35 > >> > > > > I see what's going on here: > > > > #1 - we suppress the *stopped -> *running transitions/notification when > > doing an inferior function call (the in_infcall checks in infrun.c). > > > > #2 - new threads are spawned and given *running state, because well, > > they're running. > > > > #3 - we suppress the running -> *stopped transition when doing > > an infcall, like in #1. (The in_infcall check in normal_stop). > > > > #4 - result: _new_ threads end up in "running" state, even though they > > are stopped. > > > > I don't know off hand what the best fix is. > > This is now: https://sourceware.org/bugzilla/show_bug.cgi?id=18127 I think I'm starting to understand why this happens. I will describe my findings in the bug report.