Re: Inadvertently run inferior threads

Pedro Alves <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[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

Thanks,
Pedro Alves
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.