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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.