Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2000-05-22 04:54:22 +0400
committerChristopher Faylor <me@cgf.cx>2000-05-22 04:54:22 +0400
commit7054be8b55c2f06303b0b9111dabba0ca8abe999 (patch)
treeb5fc9f975dfe15a51103e4f5f484ddea0a157db2 /winsup/cygwin
parentc9ae5a27b3b538b907c4ef4f6fe4190e3ca204c1 (diff)
* dcrt0.cc (dll_crt0_1): Move uinfo_init call to before sigproc_init to avoid a
race. (noload): Add an extra argument for debugging. * uinfo.cc (uinfo_init): Eliminate test for multiple calls. (getlogin): Assume that uinfo_init has already been called.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/dcrt0.cc22
-rw-r--r--winsup/cygwin/uinfo.cc4
3 files changed, 18 insertions, 16 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index f471f5b66..acf819b8e 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,11 @@
+Sun May 21 20:51:44 2000 Christopher Faylor <cgf@cygnus.com>
+
+ * dcrt0.cc (dll_crt0_1): Move uinfo_init call to before sigproc_init to
+ avoid a race.
+ (noload): Add an extra argument for debugging.
+ * uinfo.cc (uinfo_init): Eliminate test for multiple calls.
+ (getlogin): Assume that uinfo_init has already been called.
+
Sat May 20 01:34:57 2000 Christopher Faylor <cgf@cygnus.com>
* exceptions.cc (interruptible): Add an argument to control whether
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index b59f2d183..d5f15c593 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -721,6 +721,9 @@ dll_crt0_1 ()
/* Allocate dtable */
dtable_init ();
+/* Initialize uid, gid. */
+ uinfo_init ();
+
/* Initialize signal/subprocess handling. */
sigproc_init ();
@@ -730,11 +733,6 @@ dll_crt0_1 ()
/* Set up standard fds in file descriptor table. */
hinfo_init ();
-#if 0
- /* Initialize uid, gid. */
- uinfo_init ();
-#endif
-
/* Scan the command line and build argv. Expand wildcards if not
called from another cygwin process. */
build_argv (line, argv, argc,
@@ -758,14 +756,11 @@ dll_crt0_1 ()
set_errno (0);
debug_printf ("user_data->main %p", user_data->main);
- /* Initialize uid, gid. */
- uinfo_init ();
-
/* Flush signals and ensure that signal thread is up and running. Can't
do this for noncygwin case since the signal thread is blocked due to
LoadLibrary serialization. */
if (!dynamically_loaded)
- sig_send (NULL, __SIGFLUSH);
+ sig_send (NULL, __SIGFLUSH); /* also initializes uid, gid */
if (user_data->main && !dynamically_loaded)
exit (user_data->main (argc, argv, *user_data->envptr));
@@ -992,13 +987,14 @@ __api_fatal (const char *fmt, ...)
}
extern "C" {
-static void noload (char *s) __asm__ ("noload");
+static void noload (HANDLE h, char *s) __asm__ ("noload");
static void __attribute__((unused))
-noload (char *s)
+noload (HANDLE h, char *s)
{
- api_fatal ("couldn't dynamically determine load address for '%s', %E", s);
+ api_fatal ("couldn't dynamically determine load address for '%s' (handle %p), %E", s, h);
}
+/* FIXME: This is not thread-safe! */
__asm__ ("
.globl cygwin_dll_func_load
cygwin_dll_func_load:
@@ -1013,6 +1009,8 @@ cygwin_dll_func_load:
popl %eax # No. Get back
addl $8,%eax # pointer to name
pushl %eax # and
+ movl -4(%eax),%eax # Address of Handle to DLL
+ pushl (%eax) # Handle to DLL
call noload # issue an error
gotit:
popl %ecx # Pointer to 'return address'
diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 3bab25c48..97c754ce6 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -109,9 +109,6 @@ uinfo_init ()
{
struct passwd *p;
- if (myself->username[0])
- return;
-
myself->psid = (PSID) myself->sidbuf;
if ((p = getpwnam (internal_getlogin (myself))) != NULL)
{
@@ -140,7 +137,6 @@ getlogin (void)
static NO_COPY char this_username[MAX_USER_NAME];
#endif
- uinfo_init ();
return strcpy (this_username, myself->username);
}