]> sourceware.org Git - newlib-cygwin.git/commitdiff
* dcrt0.cc (main_environ): Initialize to &__cygwin_environment.
authorChristopher Faylor <me@cgf.cx>
Tue, 14 Mar 2006 19:07:36 +0000 (19:07 +0000)
committerChristopher Faylor <me@cgf.cx>
Tue, 14 Mar 2006 19:07:36 +0000 (19:07 +0000)
(dll_crt0_1): Move resourcelocks, thread interface, pinfo_init, and
uinfo_init...
(dll_crt0_0): ...to here.
(_dll_crt0): Call update_envptrs here after setting main_environ.
* environ.cc (environ_init): Eliminate initted variable.  Don't call
update_envptrs here.
* sigproc.cc (wait_sig): Use my_sendsig when calling CreatePipe to avoid a
dereference.

winsup/cygwin/ChangeLog
winsup/cygwin/dcrt0.cc
winsup/cygwin/dll_init.cc
winsup/cygwin/environ.cc
winsup/cygwin/sigproc.cc

index ac979fcdbdad1be582a03f59512528759e9f64a0..3d4a90fc476100e09d4c02760f751703b88c3cea 100644 (file)
@@ -1,3 +1,15 @@
+2006-03-14  Christopher Faylor  <cgf@timesys.com>
+
+       * dcrt0.cc (main_environ): Initialize to &__cygwin_environment.
+       (dll_crt0_1): Move resourcelocks, thread interface, pinfo_init, and
+       uinfo_init...
+       (dll_crt0_0): ...to here.
+       (_dll_crt0): Call update_envptrs here after setting main_environ.
+       * environ.cc (environ_init): Eliminate initted variable.  Don't call
+       update_envptrs here.
+       * sigproc.cc (wait_sig): Use my_sendsig when calling CreatePipe to
+       avoid a dereference.
+
 2006-03-13  Christopher Faylor  <cgf@timesys.com>
 
        * child_info.h (child_info_fork::handle_failure): Declare new function.
index 892a46581ff47b3de33833489fd600e346a2c9d0..46fdf926c8bc09312327c2c0a83565a2527c4801 100644 (file)
@@ -36,6 +36,7 @@ details. */
 #include "dll_init.h"
 #include "sync.h"
 #include "heap.h"
+#include "environ.h"
 
 #define MAX_AT_FILE_LEVEL 10
 
@@ -92,7 +93,7 @@ extern "C"
   /* This is an exported copy of environ which can be used by DLLs
      which use cygwin.dll.  */
   char **__cygwin_environ;
-  char ***main_environ;
+  char ***main_environ = &__cygwin_environ;
   /* __progname used in getopt error message */
   char *__progname;
   struct per_process __cygwin_user_data =
@@ -753,6 +754,14 @@ dll_crt0_0 ()
        }
     }
 
+  user_data->resourcelocks->Init ();
+  user_data->threadinterface->Init ();
+
+  if (!in_forkee)
+    {
+      pinfo_init (envp, envc);
+      uinfo_init ();   /* initialize user info */
+    }
   _cygtls::init ();
 
   /* Initialize events */
@@ -784,8 +793,6 @@ dll_crt0_1 (char *)
     small_printf ("cmalloc returns %p\n", cmalloc (HEAP_STR, n));
 #endif
 
-  user_data->resourcelocks->Init ();
-  user_data->threadinterface->Init ();
   ProtectHandle (hMainProc);
   ProtectHandle (hMainThread);
 
@@ -834,9 +841,6 @@ dll_crt0_1 (char *)
   }
 #endif
 
-  /* Initialize our process table entry. */
-  pinfo_init (envp, envc);
-
   /* Can be set only after environment has been initialized. */
   if (wincap.has_security ())
     set_cygwin_privileges (hProcImpToken);
@@ -847,9 +851,6 @@ dll_crt0_1 (char *)
   /* Allocate cygheap->fdtab */
   dtable_init ();
 
-  /* Initialize user info. */
-  uinfo_init ();
-
   /* Connect to tty. */
   tty_init ();
 
@@ -967,6 +968,7 @@ _dll_crt0 ()
     system_printf ("internal error: couldn't determine location of thread function on stack.  Expect signal problems.");
 
   main_environ = user_data->envptr;
+  update_envptrs ();
 
   char padding[CYGTLS_PADSIZE];
 
index 7c7fc640722054b7d09017369b2aa4b58faf625d..b1aceec189e43c53bde0ec970e48746c305dcd02 100644 (file)
@@ -424,7 +424,6 @@ dlfork (int val)
 void __stdcall
 update_envptrs ()
 {
-  extern char ***main_environ;
   for (dll *d = dlls.istart (DLL_ANY); d; d = dlls.inext ())
     *(d->p.envptr) = __cygwin_environ;
   *main_environ = __cygwin_environ;
index 23d0993a7777d93d0b83be39bd152c3b95a22d9c..28bfe395954de6c9e779eda1b0fcb8870cbbad34 100644 (file)
@@ -729,16 +729,12 @@ environ_init (char **envp, int envc)
   if (efault.faulted ())
     api_fatal ("internal error reading the windows environment - too many environment variables?");
 
-  static int initted;
-  if (!initted)
-    {
-      for (int i = 0; conv_envvars[i].name != NULL; i++)
-       {
-         conv_start_chars[(int) cyg_tolower (conv_envvars[i].name[0])] = 1;
-         conv_start_chars[(int) cyg_toupper (conv_envvars[i].name[0])] = 1;
-       }
-      initted = 1;
-    }
+  if (!conv_start_chars[0])
+    for (int i = 0; conv_envvars[i].name != NULL; i++)
+      {
+       conv_start_chars[(int) cyg_tolower (conv_envvars[i].name[0])] = 1;
+       conv_start_chars[(int) cyg_toupper (conv_envvars[i].name[0])] = 1;
+      }
 
   got_something_from_registry = regopt ("default");
   if (myself->progname[0])
@@ -814,7 +810,6 @@ environ_init (char **envp, int envc)
 
 out:
   __cygwin_environ = envp;
-  update_envptrs ();
   if (envp_passed_in)
     {
       p = getenv ("CYGWIN");
index 8f49320fa90aa1a6c33ae427979226121b8620ac..0b22495c901c97750e3de14782dedab6f47c4dba 100644 (file)
@@ -523,7 +523,7 @@ sig_send (_pinfo *p, int sig)
   else
     {
 #ifdef DEBUGGING
-      system_printf ("internal signal sent while signals are on hold");
+      system_printf ("signal %d sent to %p while signals are on hold", p, sig);
 #endif
       return -1;
     }
@@ -1073,11 +1073,11 @@ wait_sig (VOID *)
   /* Initialization */
   SetThreadPriority (GetCurrentThread (), WAIT_SIG_PRIORITY);
 
-  if (!CreatePipe (&readsig, &myself->sendsig, sec_user_nih (sa_buf), 0))
+  sigCONT = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL);
+  if (!CreatePipe (&readsig, &my_sendsig, sec_user_nih (sa_buf), 0))
     api_fatal ("couldn't create signal pipe, %E");
   ProtectHandle (readsig);
-  sigCONT = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL);
-  my_sendsig = myself->sendsig;
+  myself->sendsig = my_sendsig;
 
   /* Setting dwProcessId flags that this process is now capable of receiving
      signals.  Prior to this, dwProcessId was set to the windows pid of
This page took 0.040864 seconds and 5 git commands to generate.