aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2011-08-24 14:23:38 +0000
committerChristopher Faylor <me@cgf.cx>2011-08-24 14:23:38 +0000
commit8323a37d5d8987f766001221b99395b8a7a39751 (patch)
tree402b6f4a77556b307cfbb29ab03bc050f3645008
parentc9e60624d3b6663d76ccdb43a1c33198564fb16b (diff)
downloadnewlib-8323a37d5d8987f766001221b99395b8a7a39751.zip
newlib-8323a37d5d8987f766001221b99395b8a7a39751.tar.gz
newlib-8323a37d5d8987f766001221b99395b8a7a39751.tar.bz2
* thread.cc (pthread::exit): Create dummy tls structure to hold _main_tls
contents if we've asked _main_tls to exit.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/thread.cc11
2 files changed, 15 insertions, 1 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index c55014c..0eb9dcf 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-24 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * thread.cc (pthread::exit): Create dummy tls structure to hold
+ _main_tls contents if we've asked _main_tls to exit.
+
2011-08-23 Corinna Vinschen <corinna@vinschen.de>
* poll.cc (poll): Don't return prematurely if invalid fds have been
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index 389c8fd..953e0c9 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -517,7 +517,16 @@ pthread::exit (void *value_ptr)
if (InterlockedDecrement (&MT_INTERFACE->threadcount) == 0)
::exit (0);
else
- ExitThread (0);
+ {
+ if (cygtls == _main_tls)
+ {
+ _cygtls *dummy = (_cygtls *) malloc (sizeof (_cygtls));
+ *dummy = *_main_tls;
+ _main_tls = dummy;
+ _main_tls->initialized = false;
+ }
+ ExitThread (0);
+ }
}
int