summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/dcrt0.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/dcrt0.cc')
-rw-r--r--winsup/cygwin/dcrt0.cc14
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);