diff options
author | Pedro Alves <palves@redhat.com> | 2007-05-10 21:05:15 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2007-05-10 21:05:15 +0000 |
commit | 444d61395b63ff0474e8d150497ac709cf6702f6 (patch) | |
tree | 5cd2142151c86c22047df4e3095d3ba89bd96503 /gdb/gdbserver/linux-low.c | |
parent | 1d5315fee9335ecba7d345e41e451caa1d604114 (diff) | |
download | gdb-444d61395b63ff0474e8d150497ac709cf6702f6.zip gdb-444d61395b63ff0474e8d150497ac709cf6702f6.tar.gz gdb-444d61395b63ff0474e8d150497ac709cf6702f6.tar.bz2 |
* target.h (target_ops): Change return type of detach to int.
Add join.
(join_inferior): New.
* server.c (main): Don't skip detach support on mingw32.
If the inferior doesn't support detaching return error.
Call join_inferior instead of using waitpid.
* linux-low.c (linux_join): New.
(linux_target_op): Add linux_join.
* spu-low.c (spu_join): New.
(spu_target_ops): Add spu_join.
* win32-low.c (win32_detach): Adapt to new interface.
Reopen current_process_handle before detaching. Issue a child
resume before detaching.
(win32_join): New.
(win32_target_op): Add win32_join.
Diffstat (limited to 'gdb/gdbserver/linux-low.c')
-rw-r--r-- | gdb/gdbserver/linux-low.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index ff4f81e..2ea54c3 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -293,6 +293,19 @@ linux_detach (void) for_each_inferior (&all_threads, linux_detach_one_process); } +static void +linux_join (void) +{ + extern unsigned long signal_pid; + int status, ret; + + do { + ret = waitpid (signal_pid, &status, 0); + if (WIFEXITED (status) || WIFSIGNALED (status)) + break; + } while (ret != -1 || errno != ECHILD); +} + /* Return nonzero if the given thread is still alive. */ static int linux_thread_alive (unsigned long tid) @@ -1656,6 +1669,7 @@ static struct target_ops linux_target_ops = { linux_attach, linux_kill, linux_detach, + linux_join, linux_thread_alive, linux_resume, linux_wait, |