From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24631 invoked by alias); 10 Jun 2015 15:15:24 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 24621 invoked by uid 89); 10 Jun 2015 15:15:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_05,RCVD_IN_DNSWL_NONE,SPF_SOFTFAIL autolearn=no version=3.3.2 X-HELO: mtaout29.012.net.il Received: from mtaout29.012.net.il (HELO mtaout29.012.net.il) (80.179.55.185) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 10 Jun 2015 15:15:22 +0000 Received: from conversion-daemon.mtaout29.012.net.il by mtaout29.012.net.il (HyperSendmail v2007.08) id <0NPQ00300IAY8I00@mtaout29.012.net.il> for gdb@sourceware.org; Wed, 10 Jun 2015 18:14:45 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by mtaout29.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NPQ00KFRICL0A80@mtaout29.012.net.il>; Wed, 10 Jun 2015 18:14:45 +0300 (IDT) Date: Wed, 10 Jun 2015 15:15:00 -0000 From: Eli Zaretskii Subject: Re: Inadvertently run inferior threads In-reply-to: <55045AB9.2000408@redhat.com> To: Pedro Alves Cc: gdb@sourceware.org Reply-to: Eli Zaretskii Message-id: <831thjtx1d.fsf@gnu.org> References: <83h9tq3zu3.fsf@gnu.org> <55043A63.6020103@redhat.com> <8361a339xd.fsf@gnu.org> <5504555C.804@redhat.com> <550458E0.10206@redhat.com> <55045AB9.2000408@redhat.com> X-IsSubscribed: yes X-SW-Source: 2015-06/txt/msg00004.txt.bz2 > Date: Sat, 14 Mar 2015 15:58:49 +0000 > From: Pedro Alves > CC: gdb@sourceware.org > > 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.