OSDN Git Service

* fork.cc (fork_child): Invert sense of test which defeated correct handling in
authorcgf <cgf>
Wed, 18 Feb 2004 22:32:15 +0000 (22:32 +0000)
committercgf <cgf>
Wed, 18 Feb 2004 22:32:15 +0000 (22:32 +0000)
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
winsup/cygwin/dcrt0.cc
winsup/cygwin/fork.cc

index 12e69f5..abb7de5 100644 (file)
@@ -1,5 +1,15 @@
 2004-02-18  Christopher Faylor  <cgf@redhat.com>
 
+       * 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  <cgf@redhat.com>
+
        * gendef (stabilize_sig_stack): New function.
        (setjmp): Import, add sig stack handling.  Store sig stack info.
        (longjmp): Call stabilize_sig_stack.  Restore sig stack info.
index 4d48314..06982e6 100644 (file)
@@ -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 ();
 
index b8cd3ed..c26d2d6 100644 (file)
@@ -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);