From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5944 invoked by alias); 26 Aug 2003 18:32: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 5896 invoked from network); 26 Aug 2003 18:32:04 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 26 Aug 2003 18:32:04 -0000 Received: from drow by nevyn.them.org with local (Exim 4.20 #1 (Debian)) id 19ri1K-0006cO-U5; Tue, 26 Aug 2003 13:54:18 -0400 Date: Tue, 26 Aug 2003 18:32:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com, jjohnstn@redhat.com Subject: Re: lin-lwp and exiting threads Message-ID: <20030826175418.GA25424@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com, jjohnstn@redhat.com References: <20030826175135.GA25329@nevyn.them.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030826175135.GA25329@nevyn.them.org> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-08/txt/msg00449.txt.bz2 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? 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? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer