summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/dll_init.cc6
2 files changed, 10 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c2c32cb51..7a964d41c 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,11 @@
2006-05-27 Christopher Faylor <cgf@timesys.com>
+ * dll_init.cc (dll_dllcrt0): Previous change didn't work very well with
+ fork. Semi-revert it but change name of variable to something that
+ makes better sense.
+
+2006-05-27 Christopher Faylor <cgf@timesys.com>
+
* thread.cc (verifyable_object_isvalid): Check for NULL specifically.
2006-05-27 Christopher Faylor <cgf@timesys.com>
diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc
index 670a8e79b..977ca312d 100644
--- a/winsup/cygwin/dll_init.cc
+++ b/winsup/cygwin/dll_init.cc
@@ -365,6 +365,8 @@ dll_dllcrt0 (HMODULE h, per_process *p)
else
*(p->impure_ptr_ptr) = __cygwin_user_data.impure_ptr;
+ bool linking = !in_forkee && !cygwin_finished_initializing;
+
/* Partially initialize Cygwin guts for non-cygwin apps. */
if (dynamically_loaded && user_data->magic_biscuit == 0)
dll_crt0 (p);
@@ -377,7 +379,7 @@ dll_dllcrt0 (HMODULE h, per_process *p)
initializing, then the DLL must be a cygwin-aware DLL
that was explicitly linked into the program rather than
a dlopened DLL. */
- if (cygwin_finished_initializing)
+ if (linking)
type = DLL_LINK;
else
{
@@ -393,7 +395,7 @@ dll_dllcrt0 (HMODULE h, per_process *p)
initialize the DLL. If we haven't finished initializing,
it may not be safe to call the dll's "main" since not
all of cygwin's internal structures may have been set up. */
- if (!d || (cygwin_finished_initializing && !d->init ()))
+ if (!d || (!linking && !d->init ()))
return -1;
return (DWORD) d;