2007-04-08 Pedro Alves * win32-nat.c (win32_detach): Reset the CONTEXT_CONTROL part of the main thread's context and clear the FLAGS_TRACE_BIT before detaching. --- gdb/win32-nat.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) Index: src/gdb/win32-nat.c =================================================================== --- src.orig/gdb/win32-nat.c 2007-04-08 12:11:22.000000000 +0100 +++ src/gdb/win32-nat.c 2007-04-08 12:11:54.000000000 +0100 @@ -1775,7 +1775,23 @@ win32_detach (char *args, int from_tty) if (has_detach_ability ()) { - delete_command (NULL, 0); + thread_info *th; + + /* Don't leave breakpoints in the inferior. */ + remove_breakpoints (); + + /* We also need to reset the thread's context, + else we'll get frequent inferior crashes. */ + th = thread_rec (current_event.dwThreadId, FALSE); + th->context.ContextFlags = CONTEXT_CONTROL; + win32_fetch_inferior_registers (PS_REGNUM); + /* Doing a SetThreadContext with CONTEXT_CONTROL seems to be + enough, but let's clear FLAGS_TRACE_BIT just in case + somewhere else it gets set. */ + th->context.EFlags &= ~FLAG_TRACE_BIT; + CHECK (SetThreadContext (th->h, &th->context)); + th->context.ContextFlags = 0; + win32_continue (DBG_CONTINUE, -1); if (!DebugActiveProcessStop (current_event.dwProcessId)) {