From 9d6063994fbb0f0ec4fb8005f18bc84768592368 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Wed, 3 Jan 2007 17:57:16 +0000 Subject: [PATCH] * linux-low.c (linux_kill): Handle being called with no threads. * win32-i386-low.c (win32_kill): Likewise. (get_child_debug_event): Clear current_process_handle. --- gdb/gdbserver/ChangeLog | 9 ++++++++- gdb/gdbserver/linux-low.c | 6 +++++- gdb/gdbserver/win32-i386-low.c | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index d2b7d3b67b4..2035473d5d7 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,4 +1,11 @@ -2006-12-30 Denis PILAT +2007-01-03 Denis Pilat + Daniel Jacobowitz + + * linux-low.c (linux_kill): Handle being called with no threads. + * win32-i386-low.c (win32_kill): Likewise. + (get_child_debug_event): Clear current_process_handle. + +2006-12-30 Denis PILAT Daniel Jacobowitz * remote-utils.c (remote_open): Check the type of specified diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 83a56aa1faa..64273b50ae9 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -255,13 +255,17 @@ static void linux_kill (void) { struct thread_info *thread = (struct thread_info *) all_threads.head; - struct process_info *process = get_thread_process (thread); + struct process_info *process; int wstat; + if (thread == NULL) + return; + for_each_inferior (&all_threads, linux_kill_one_process); /* See the comment in linux_kill_one_process. We did not kill the first thread in the list, so do so now. */ + process = get_thread_process (thread); do { ptrace (PTRACE_KILL, pid_of (process), 0, 0); diff --git a/gdb/gdbserver/win32-i386-low.c b/gdb/gdbserver/win32-i386-low.c index de6ef0b8461..ee2d2d19c04 100644 --- a/gdb/gdbserver/win32-i386-low.c +++ b/gdb/gdbserver/win32-i386-low.c @@ -582,6 +582,9 @@ win32_attach (unsigned long pid) static void win32_kill (void) { + if (current_process_handle == NULL) + return; + TerminateProcess (current_process_handle, 0); for (;;) { @@ -901,6 +904,7 @@ in: ourstatus->kind = TARGET_WAITKIND_EXITED; ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode; CloseHandle (current_process_handle); + current_process_handle = NULL; retval = main_thread_id; break; -- 2.30.2