From d52381923e2268e0974fa07917220bd3fb20dbf5 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Tue, 5 Aug 2008 14:26:46 +0000 Subject: [PATCH] * 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. --- winsup/cygwin/ChangeLog | 7 +++++++ winsup/cygwin/dll_init.cc | 5 ++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 32e9590b26..9e31b2a059 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 9a867b5d83..dac48618a1 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 (); } -- 2.11.0