Changes suggested by Dave Korn.

* dcrt0.cc (cygwin_exit): Remove (hopefully) extraneous call to
dll_global_dtors.
* dll_init.cc (dll_global_dtors): Run destructors in reverse dependency/load
order.
* dll_init.h (dll_list): Add dll_global_dtors as a friend.
This commit is contained in:
Christopher Faylor 2008-08-04 15:55:32 +00:00
parent ea8432dfb1
commit bee18f45fd
4 changed files with 11 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2008-08-04 Christopher Faylor <me+cygwin@cgf.cx>
Changes suggested by Dave Korn.
* dcrt0.cc (cygwin_exit): Remove (hopefully) extraneous call to
dll_global_dtors.
* dll_init.cc (dll_global_dtors): Run destructors in reverse
dependency/load order.
* dll_init.h (dll_list): Add dll_global_dtors as a friend.
2008-08-01 Christopher Faylor <me+cygwin@cgf.cx>
* dcrt0.cc (dll_crt0_1): Add a symbol denoting return from call to

View File

@ -1112,7 +1112,6 @@ cygwin_atexit (void (*function)(void))
extern "C" void
cygwin_exit (int n)
{
dll_global_dtors ();
if (atexit_lock)
atexit_lock.acquire ();
exit (n);

View File

@ -32,7 +32,7 @@ dll_global_dtors ()
int recorded = dll_global_dtors_recorded;
dll_global_dtors_recorded = false;
if (recorded)
for (dll *d = dlls.istart (DLL_ANY); d; d = dlls.inext ())
for (dll *d = dlls.end; d != &dlls.start; d = d->prev)
d->p.run_dtors ();
}

View File

@ -86,6 +86,7 @@ public:
hold = &start;
return inext ();
}
friend void dll_global_dtors ();
};
extern dll_list dlls;