diff options
Diffstat (limited to 'winsup/cygwin/dcrt0.cc')
-rw-r--r-- | winsup/cygwin/dcrt0.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 4b752cf63..2959c6f08 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -947,9 +947,10 @@ __main (void) enum { - ES_SIGNAL = 1, - ES_CLOSEALL = 2, - ES_SIGPROCTERMINATE = 3 + ES_THREADTERM = 1, + ES_SIGNAL = 2, + ES_CLOSEALL = 3, + ES_SIGPROCTERMINATE = 4 }; extern "C" void __stdcall @@ -962,6 +963,12 @@ do_exit (int status) system_printf ("DisableThreadLibraryCalls (%p) failed, %E", cygwin_hmodule); + if (exit_state < ES_THREADTERM) + { + exit_state = ES_THREADTERM; + cygthread::terminate (); + } + syscall_printf ("do_exit (%d)", n); vfork_save *vf = vfork_storage.val (); @@ -1028,7 +1035,6 @@ do_exit (int status) window_terminate (); events_terminate (); shared_terminate (); - cygthread::terminate (); minimal_printf ("winpid %d, exit %d", GetCurrentProcessId (), n); myself->exit (n); |