From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27981 invoked by alias); 15 Dec 2002 21:38:54 -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 27974 invoked from network); 15 Dec 2002 21:38:53 -0000 Received: from unknown (HELO crack.them.org) (65.125.64.184) by sources.redhat.com with SMTP; 15 Dec 2002 21:38:53 -0000 Received: from nevyn.them.org ([66.93.61.169] ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 18NiLs-0002Te-00; Sun, 15 Dec 2002 17:39:16 -0600 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 18NgUK-0001UE-00; Sun, 15 Dec 2002 16:39:52 -0500 Date: Sun, 15 Dec 2002 13:43:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Cc: msnyder@redhat.com, kettenis@gnu.org Subject: RFA[threads]: Fork event updates, part the thirteenth Message-ID: <20021215213952.GA3923@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com, msnyder@redhat.com, kettenis@gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.1i X-SW-Source: 2002-12/txt/msg00462.txt.bz2 Now is where it starts to get interesting. Michael, I mentioned this patch to you at lunch last week. If you take a short-lived program, run it, and detach it, and run it again, you'll see the exit of the _previous_ copy. Then GDB gets hopelessly confused. I have a testcase for this which I'll post in a moment. The reason it's included here is that that's essentially what happens if you are using "set follow-fork-mode child". We detach from the parent, which exits, confusing GDB. Is this OK? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2002-12-15 Daniel Jacobowitz * lin-lwp.c (child_wait): Ignore exit statuses for processes other than inferior_ptid. (lin_lwp_wait): Ignore exit statuses for unknown LWPs. Index: lin-lwp.c =================================================================== RCS file: /cvs/src/src/gdb/lin-lwp.c,v retrieving revision 1.39 diff -u -p -r1.39 lin-lwp.c --- lin-lwp.c 9 Dec 2002 18:41:42 -0000 1.39 +++ lin-lwp.c 15 Dec 2002 21:16:34 -0000 @@ -964,6 +964,14 @@ child_wait (ptid_t ptid, struct target_w pid = waitpid (GET_PID (ptid), &status, __WCLONE); save_errno = errno; + /* Make sure we don't report an event for the exit of the + original program, if we've detached from it. */ + if (pid != -1 && ! WIFSTOPPED (status) && pid != GET_PID (inferior_ptid)) + { + pid = -1; + save_errno = EINTR; + } + clear_sigio_trap (); clear_sigint_trap (); } @@ -1091,6 +1099,17 @@ lin_lwp_wait (ptid_t ptid, struct target gdb_assert (pid == -1 || lwpid == pid); lp = find_lwp_pid (pid_to_ptid (lwpid)); + + /* Make sure we don't report an event for the exit of an LWP not in + our list, i.e. not part of the current process. This can happen + if we detach from a program we original forked and then it + exits. */ + if (! WIFSTOPPED (status) && ! lp) + { + status = 0; + continue; + } + if (! lp) { lp = add_lwp (BUILD_LWP (lwpid, GET_PID (inferior_ptid)));