From: Ian Lance Taylor Date: Mon, 19 Jan 1998 18:38:51 +0000 (+0000) Subject: From cgf@bbc.com (Chris Faylor): X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b5edcb4521a8ebe0af5f19a8a8564a9f602eba2d;p=binutils-gdb.git From cgf@bbc.com (Chris Faylor): * win32-nat.c (child_mourn_inferior): Call ContinueDebugEvent to let the child exit. (child_kill_inferior): Respond to all debug events as the child is terminating. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a41a9d5bd9a..f66e3e8a714 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ Mon Jan 19 13:34:40 1998 Ian Lance Taylor + From cgf@bbc.com (Chris Faylor): + * win32-nat.c (child_mourn_inferior): Call ContinueDebugEvent to + let the child exit. + (child_kill_inferior): Respond to all debug events as the child is + terminating. + * Makefile.in (all): Change gdb dependency to gdb$(EXEEXT). (uninstall): Add $(EXEEXT) to file name to remove. (gdb$(EXEEXT)): Rename target from plain gdb. diff --git a/gdb/win32-nat.c b/gdb/win32-nat.c index 664d554212a..be83b7af3e5 100644 --- a/gdb/win32-nat.c +++ b/gdb/win32-nat.c @@ -1,5 +1,5 @@ /* Target-vector operations for controlling win32 child processes, for GDB. - Copyright 1995, 1996 Free Software Foundation, Inc. + Copyright 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB. @@ -768,6 +768,9 @@ child_create_inferior (exec_file, allargs, env) static void child_mourn_inferior () { + (void) ContinueDebugEvent (current_process_id, + current_thread_id, + DBG_CONTINUE); unpush_target (&child_ops); generic_mourn_inferior (); } @@ -808,6 +811,22 @@ void child_kill_inferior (void) { CHECK (TerminateProcess (current_process, 0)); + + for (;;) + { + DEBUG_EVENT event; + if (!ContinueDebugEvent (current_process_id, + current_thread_id, + DBG_CONTINUE)) + break; + if (!WaitForDebugEvent (&event, INFINITE)) + break; + current_thread_id = event.dwThreadId; + current_process_id = event.dwProcessId; + if (event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) + break; + } + CHECK (CloseHandle (current_process)); CHECK (CloseHandle (current_thread)); target_mourn_inferior(); /* or just child_mourn_inferior? */