From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10552 invoked by alias); 26 Aug 2003 18:48:05 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 10534 invoked from network); 26 Aug 2003 18:48:04 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 26 Aug 2003 18:48:04 -0000 Received: from drow by nevyn.them.org with local (Exim 4.20 #1 (Debian)) id 19rioT-0007ch-F5; Tue, 26 Aug 2003 14:45:05 -0400 Date: Tue, 26 Aug 2003 18:48:00 -0000 From: Daniel Jacobowitz To: "J. Johnston" Cc: gdb-patches@sources.redhat.com Subject: Re: lin-lwp and exiting threads Message-ID: <20030826184505.GA29287@nevyn.them.org> Mail-Followup-To: "J. Johnston" , gdb-patches@sources.redhat.com References: <20030826175135.GA25329@nevyn.them.org> <20030826175418.GA25424@nevyn.them.org> <3F4BAA4B.6050508@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3F4BAA4B.6050508@redhat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-08/txt/msg00450.txt.bz2 On Tue, Aug 26, 2003 at 02:43:23PM -0400, J. Johnston wrote: > Daniel Jacobowitz wrote: > >On Tue, Aug 26, 2003 at 01:51:35PM -0400, Daniel Jacobowitz wrote: > > > >>Hi Jeff, > >> > >>I'm doing some work in lin-lwp.c and I saw this bit you recently > >>committed: > >> > >>+ /* Check if the current LWP has previously exited. For nptl > >>threads, > >>+ there is no exit signal issued for LWPs that are not the > >>+ main thread so we should check whenever the thread is stopped. > >>*/ > >>+ if (!lin_lwp_thread_alive (lp->ptid)) > >>+ { > >>+ if (in_thread_list (lp->ptid)) > >>+ { > >>+ /* Core GDB cannot deal with us deleting the current > >>+ thread. */ > >>+ if (!ptid_equal (lp->ptid, inferior_ptid)) > >>+ delete_thread (lp->ptid); > >>+ printf_unfiltered ("[%s exited]\n", > >>+ target_pid_to_str (lp->ptid)); > >>+ } > >>+ if (debug_lin_lwp) > >>+ fprintf_unfiltered (gdb_stdlog, > >>+ "SWC: %s already exited.\n", > >> target_pid_to_str (lp->ptid)); > >> > >> > >>This is right after waitpid has returned a non-exiting stopped status for > >>lp->ptid. Were you just being thorough, or do you have some reason to > >>believe that waitpid would ever return WIFSTOPPED (status) and yet the > >>thread would be dead? > > > > In the early days of nptl, the kernel wasn't always doing what it was > expected to. This appears to be leftover code as I attempted to ensure we > caught the thread exiting one way or another. > > > > >Also, there's: > > pid = waitpid (GET_LWP (lp->ptid), &status, 0); > > if (pid == -1 && errno == ECHILD) > > { > > pid = waitpid (GET_LWP (lp->ptid), &status, __WCLONE); > > if (pid == -1 && errno == ECHILD) > > { > > /* The thread has previously exited. We need to delete it now > > because in the case of NPTL threads, there won't be an > > exit event unless it is the main thread. */ > > if (debug_lin_lwp) > > fprintf_unfiltered (gdb_stdlog, > > "SWC: %s exited.\n", > > target_pid_to_str (lp->ptid)); > > delete_lwp (lp->ptid); > > return 0; > > } > > } > > > >Is there some reason you don't also call delete_thread? > > > > Hmm, appears to be an oversight on my part. > > Do you want to make these changes? I'll take care of it, since I'm moving this code anyway. I just wanted to check that I wasn't missing some Grand Design (TM). -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer