diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 32e9590b2..9e31b2a05 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2008-08-05 Christopher Faylor + + * 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. + 2008-08-04 Christopher Faylor Changes suggested by Dave Korn. 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 (); }