diff options
author | Daniel Jacobowitz <drow@false.org> | 2003-01-09 19:14:46 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2003-01-09 19:14:46 +0000 |
commit | b3ba1b4442c71e25f857581f47db64cea2687f2e (patch) | |
tree | ed61001c4429c8f103450e80c482b5fb47dcd528 | |
parent | 479ab5a00d3aa5dba754b8231a4c9e0b03d33ded (diff) | |
download | binutils-gdb-b3ba1b4442c71e25f857581f47db64cea2687f2e.tar.gz |
* lin-lwp.c (child_wait): Ignore exit statuses for processes other
than inferior_ptid.
(lin_lwp_wait): Ignore exit statuses for unknown LWPs.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/lin-lwp.c | 21 |
2 files changed, 26 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3be766ada59..11ca8781169 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/lin-lwp.c b/gdb/lin-lwp.c index 611892778d6..aad8c19bb0f 100644 --- a/gdb/lin-lwp.c +++ b/gdb/lin-lwp.c @@ -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))); |