From cgf@bbc.com (Chris Faylor):
authorIan Lance Taylor <ian@airs.com>
Mon, 19 Jan 1998 18:38:51 +0000 (18:38 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 19 Jan 1998 18:38:51 +0000 (18:38 +0000)
* 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.

gdb/ChangeLog
gdb/win32-nat.c

index a41a9d5bd9a6b093a5cbf3eed3d9fcf8f190f3f0..f66e3e8a7141603a08373ee0ab15ac239c7db116 100644 (file)
@@ -1,5 +1,11 @@
 Mon Jan 19 13:34:40 1998  Ian Lance Taylor  <ian@cygnus.com>
 
+       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.
index 664d554212a474bd1fa96a8830979684dd89e42e..be83b7af3e5c0f906bcb1721d4c9055c7a7a1219 100644 (file)
@@ -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? */