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, 12 insertions, 2 deletions
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 457661000..ea0edbd0c 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -1013,8 +1013,18 @@ do_exit (int status)
#endif
EnterCriticalSection (&exit_lock);
- muto::set_exiting_thread ();
- dll_global_dtors ();
+
+ if (exit_state < ES_SET_MUTO)
+ {
+ exit_state = ES_SET_MUTO;
+ muto::set_exiting_thread ();
+ }
+
+ if (exit_state < ES_GLOBAL_DTORS)
+ {
+ exit_state = ES_GLOBAL_DTORS;
+ dll_global_dtors ();
+ }
if (exit_state < ES_EVENTS_TERMINATE)
{