From 9b907669f92e216924dd4074f8f352b6f777de6c Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Tue, 29 Sep 2009 00:39:01 +0000 Subject: [PATCH] * spu-low.c (spu_kill): Wait for inferior to terminate. Call clear_inferiors. (spu_detach): Call clear_inferiors. --- gdb/gdbserver/ChangeLog | 6 ++++++ gdb/gdbserver/spu-low.c | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 19162a7ac6f..6adede6ec3e 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2009-09-28 Ulrich Weigand + + * spu-low.c (spu_kill): Wait for inferior to terminate. + Call clear_inferiors. + (spu_detach): Call clear_inferiors. + 2009-08-22 Ralf Wildenhues * aclocal.m4: Regenerate. diff --git a/gdb/gdbserver/spu-low.c b/gdb/gdbserver/spu-low.c index 89d80c25918..ed3bdca13dd 100644 --- a/gdb/gdbserver/spu-low.c +++ b/gdb/gdbserver/spu-low.c @@ -321,11 +321,20 @@ spu_attach (unsigned long pid) static int spu_kill (int pid) { + int status, ret; struct process_info *process = find_process_pid (pid); if (process == NULL) return -1; ptrace (PTRACE_KILL, pid, 0, 0); + + do { + ret = waitpid (pid, &status, 0); + if (WIFEXITED (status) || WIFSIGNALED (status)) + break; + } while (ret != -1 || errno != ECHILD); + + clear_inferiors (); remove_process (process); return 0; } @@ -339,6 +348,8 @@ spu_detach (int pid) return -1; ptrace (PTRACE_DETACH, pid, 0, 0); + + clear_inferiors (); remove_process (process); return 0; } -- 2.47.2