From d73f9745f1fb89f14ce407aaafc3598036a65170 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Mon, 27 May 2002 01:49:08 +0000 Subject: [PATCH] * strace.cc (attach_process): Don't tell process to start stracing here. (proc_child): Do it here, instead, after first debug event. This should work around inexplicable races with DebugActiveProcess. (dostrace): Pass any pid argument to proc_child. --- winsup/utils/ChangeLog | 8 ++++++++ winsup/utils/strace.cc | 11 ++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index 404f93d31..0664b9beb 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,11 @@ +2002-05-26 Christopher Faylor + + * strace.cc (attach_process): Don't tell process to start stracing + here. + (proc_child): Do it here, instead, after first debug event. This + should work around inexplicable races with DebugActiveProcess. + (dostrace): Pass any pid argument to proc_child. + 2002-05-23 Joshua Daniel Franklin * setfacl.c (usage): Standardize usage output. Change return type to diff --git a/winsup/utils/strace.cc b/winsup/utils/strace.cc index 6bb145c0f..99664ad08 100644 --- a/winsup/utils/strace.cc +++ b/winsup/utils/strace.cc @@ -291,7 +291,6 @@ attach_process (pid_t pid) if (!DebugActiveProcess (child_pid)) error (0, "couldn't attach to pid %d<%d> for debugging", pid, child_pid); - (void) cygwin_internal (CW_STRACE_TOGGLE, pid); printf ("Attached to pid %d (windows pid %u)\n", pid, (unsigned) child_pid); return; } @@ -572,7 +571,7 @@ handle_output_debug_string (DWORD id, LPVOID p, unsigned mask, FILE *ofile) } static void -proc_child (unsigned mask, FILE *ofile) +proc_child (unsigned mask, FILE *ofile, pid_t pid) { DEBUG_EVENT ev; int processes = 0; @@ -595,6 +594,12 @@ proc_child (unsigned mask, FILE *ofile) if (!debug_event) continue; + if (pid) + { + (void) cygwin_internal (CW_STRACE_TOGGLE, pid); + pid = 0; + } + switch (ev.dwDebugEventCode) { case CREATE_PROCESS_DEBUG_EVENT: @@ -651,7 +656,7 @@ dostrace (unsigned mask, FILE *ofile, pid_t pid, char **argv) create_child (argv); else attach_process (pid); - proc_child (mask, ofile); + proc_child (mask, ofile, pid); return; }