* 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.
This commit is contained in:
parent
3b731dc0e1
commit
e5aa298da5
|
@ -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.
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue