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>2008-08-05 18:26:47 +0400
committerChristopher Faylor <me@cgf.cx>2008-08-05 18:26:47 +0400
commit53364a1fae1574b2429827a03c55c36024348c3e (patch)
treece892c63a30e6a8f5b0812eafe94c6a00ac9f05f /winsup/cygwin/dll_init.cc
parentbee18f45fd83bc2432a856b116e9b85b42c140d2 (diff)
* dll_init.cc (dll_global_dtors): Add an additional test to avoid walking the
linked list if it is empty. (dll_list::detach): Don't set dll_global_dtors_recorded if we aren't actually going to record any dlls.
Diffstat (limited to 'winsup/cygwin/dll_init.cc')
-rw-r--r--winsup/cygwin/dll_init.cc5
1 files changed, 2 insertions, 3 deletions
diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc
index 9a867b5d8..dac48618a 100644
--- a/winsup/cygwin/dll_init.cc
+++ b/winsup/cygwin/dll_init.cc
@@ -31,7 +31,7 @@ dll_global_dtors ()
{
int recorded = dll_global_dtors_recorded;
dll_global_dtors_recorded = false;
- if (recorded)
+ if (recorded && dlls.start.next)
for (dll *d = dlls.end; d != &dlls.start; d = d->prev)
d->p.run_dtors ();
}
@@ -217,10 +217,9 @@ dll_list::detach (void *retaddr)
void
dll_list::init ()
{
- dll_global_dtors_recorded = true;
-
/* Walk the dll chain, initializing each dll */
dll *d = &start;
+ dll_global_dtors_recorded = d->next != NULL;
while ((d = d->next))
d->init ();
}