* lin-lwp.c (child_wait): Ignore exit statuses for processes other
authorDaniel Jacobowitz <drow@false.org>
Thu, 9 Jan 2003 19:14:46 +0000 (19:14 +0000)
committerDaniel Jacobowitz <drow@false.org>
Thu, 9 Jan 2003 19:14:46 +0000 (19:14 +0000)
than inferior_ptid.
(lin_lwp_wait): Ignore exit statuses for unknown LWPs.

gdb/ChangeLog
gdb/lin-lwp.c

index 3be766ada5955a658e2d32d1ceed889d46cc84ef..11ca8781169232a509d59c7e2b96e8074e3cd17f 100644 (file)
@@ -1,3 +1,9 @@
+2003-01-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       * lin-lwp.c (child_wait): Ignore exit statuses for processes other
+       than inferior_ptid.
+       (lin_lwp_wait): Ignore exit statuses for unknown LWPs.
+
 2003-01-09  Andrew Cagney  <ac131313@redhat.com>
 
        * frame.h (frame_obstack_zalloc): Replace frame_obstack_alloc.
index 611892778d6a4c1bfd7be7d8885ba994dda0a02f..aad8c19bb0f43becca08094b6be72b0d1404efa5 100644 (file)
@@ -1,5 +1,5 @@
 /* Multi-threaded debugging support for GNU/Linux (LWP layer).
-   Copyright 2000, 2001 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -1062,6 +1062,14 @@ child_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
 
       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 ();
     }
@@ -1206,6 +1214,17 @@ lin_lwp_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
            }
 
          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)));