* globals.cc (enum exit_states::ES_GLOBAL_DTORS): Delete.
* dcrt0.cc (__main): Schedule dll_global_dtors to run atexit before global dtors. (do_exit): Delete test for ES_GLOBAL_DTORS and call to dll_global_dtors.
This commit is contained in:
parent
0986989f6a
commit
900f20710f
|
@ -1,3 +1,11 @@
|
||||||
|
2009-07-29 Dave Korn <dave.korn.cygwin@googlemail.com>
|
||||||
|
|
||||||
|
* globals.cc (enum exit_states::ES_GLOBAL_DTORS): Delete.
|
||||||
|
* dcrt0.cc (__main): Schedule dll_global_dtors to run
|
||||||
|
atexit before global dtors.
|
||||||
|
(do_exit): Delete test for ES_GLOBAL_DTORS and call to
|
||||||
|
dll_global_dtors.
|
||||||
|
|
||||||
2009-07-29 Corinna Vinschen <corinna@vinschen.de>
|
2009-07-29 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* path.h (class path_conv): Convert path from char array to char *.
|
* path.h (class path_conv): Convert path from char array to char *.
|
||||||
|
|
|
@ -993,8 +993,17 @@ cygwin_dll_init ()
|
||||||
extern "C" void
|
extern "C" void
|
||||||
__main (void)
|
__main (void)
|
||||||
{
|
{
|
||||||
|
/* Ordering is critical here. DLL ctors have already been
|
||||||
|
run as they were being loaded, so we should stack the
|
||||||
|
queued call to DLL dtors now. */
|
||||||
|
atexit (dll_global_dtors);
|
||||||
do_global_ctors (user_data->ctors, false);
|
do_global_ctors (user_data->ctors, false);
|
||||||
|
/* Now we have run global ctors, register their dtors. */
|
||||||
atexit (do_global_dtors);
|
atexit (do_global_dtors);
|
||||||
|
/* At exit, global dtors will run first, so the app can still
|
||||||
|
use shared library functions while terminating; then the
|
||||||
|
DLLs will be destroyed; finally newlib will shut down stdio
|
||||||
|
and terminate itself. */
|
||||||
}
|
}
|
||||||
|
|
||||||
void __stdcall
|
void __stdcall
|
||||||
|
@ -1013,12 +1022,6 @@ do_exit (int status)
|
||||||
|
|
||||||
lock_process until_exit (true);
|
lock_process until_exit (true);
|
||||||
|
|
||||||
if (exit_state < ES_GLOBAL_DTORS)
|
|
||||||
{
|
|
||||||
exit_state = ES_GLOBAL_DTORS;
|
|
||||||
dll_global_dtors ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exit_state < ES_EVENTS_TERMINATE)
|
if (exit_state < ES_EVENTS_TERMINATE)
|
||||||
{
|
{
|
||||||
exit_state = ES_EVENTS_TERMINATE;
|
exit_state = ES_EVENTS_TERMINATE;
|
||||||
|
|
|
@ -30,7 +30,6 @@ enum exit_states
|
||||||
{
|
{
|
||||||
ES_NOT_EXITING = 0,
|
ES_NOT_EXITING = 0,
|
||||||
ES_PROCESS_LOCKED,
|
ES_PROCESS_LOCKED,
|
||||||
ES_GLOBAL_DTORS,
|
|
||||||
ES_EVENTS_TERMINATE,
|
ES_EVENTS_TERMINATE,
|
||||||
ES_THREADTERM,
|
ES_THREADTERM,
|
||||||
ES_SIGNAL,
|
ES_SIGNAL,
|
||||||
|
|
Loading…
Reference in New Issue