From 0e061ecf96928e04e46bf07ce87e81a7d2fd00a6 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Wed, 18 Feb 2004 22:32:15 +0000 Subject: [PATCH] * fork.cc (fork_child): Invert sense of test which defeated correct handling in a fork from a non-main thread. * dcrt0.cc (initial_env): Eliminate parameter and just send DebugBreak when appropriate. (dll_crt0_0): Reflect parameter change to initial_env. (dll_crt0_1): Don't call initial_env. --- winsup/cygwin/ChangeLog | 10 ++++++++++ winsup/cygwin/dcrt0.cc | 21 ++++++--------------- winsup/cygwin/fork.cc | 2 +- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 12e69f5ed..abb7de551 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,13 @@ +2004-02-18 Christopher Faylor + + * fork.cc (fork_child): Invert sense of test which defeated correct + handling in a fork from a non-main thread. + + * dcrt0.cc (initial_env): Eliminate parameter and just send DebugBreak + when appropriate. + (dll_crt0_0): Reflect parameter change to initial_env. + (dll_crt0_1): Don't call initial_env. + 2004-02-18 Christopher Faylor * gendef (stabilize_sig_stack): New function. diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 4d48314e7..06982e653 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -536,25 +536,15 @@ break_here () #endif static void -initial_env (bool first) +initial_env () { char buf[CYG_MAX_PATH + 1]; - if (!first) - /* nothing */; - else if (GetEnvironmentVariable ("CYGWIN_TESTING", buf, sizeof (buf) - 1)) + if (GetEnvironmentVariable ("CYGWIN_TESTING", buf, sizeof (buf) - 1)) _cygwin_testing = 1; + #ifdef DEBUGGING DWORD len; - static bool NO_COPY did_debugging_stuff; -#if 0 - if (did_debugging_stuff || (first && wincap.cant_debug_dll_entry ())) - return; -#else - if (first) - return; -#endif - did_debugging_stuff = true; if (GetEnvironmentVariable ("CYGWIN_SLEEP", buf, sizeof (buf) - 1)) { DWORD ms = atoi (buf); @@ -583,6 +573,8 @@ initial_env (bool first) { error_start_init (p); try_to_debug (); + console_printf ("*** Sending Break. gdb may issue spurious SIGTRAP message.\n"); + DebugBreak (); break_here (); } } @@ -594,7 +586,7 @@ void __stdcall dll_crt0_0 () { wincap.init (); - initial_env (true); + initial_env (); char zeros[sizeof (child_proc_info->zero)] = {0}; @@ -736,7 +728,6 @@ dll_crt0_1 (char *) /* FIXME: Verify forked children get their exception handler set up ok. */ exception_list cygwin_except_entry; - initial_env (false); check_sanity_and_sync (user_data); malloc_init (); diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index b8cd3ed80..c26d2d678 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -246,7 +246,7 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls) /* If we've played with the stack, stacksize != 0. That means that fork() was invoked from other than the main thread. Make sure that the threadinfo information is properly set up. */ - if (!fork_info->stacksize) + if (fork_info->stacksize) { _main_tls = &_my_tls; _main_tls->init_thread (NULL, NULL);