summaryrefslogtreecommitdiffstats
path: root/winsup
diff options
context:
space:
mode:
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/thread.cc3
2 files changed, 10 insertions, 0 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 7a9587714..4736150e1 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,10 @@
+2003-11-11 Christopher Faylor <cgf@redhat.com>
+ Thomas Pfaff <tpfaff@gmx.net>
+
+ * thread.cc (pthread::exit): Cleanup on thread exit.
+ (__reent_t::init_clib): Set thread local clib __cleanup var
+ appropriately.
+
2003-11-10 Christopher Faylor <cgf@redhat.com>
* miscfuncs.cc (low_priority_sleep): Make a "C" function.
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc
index 93aeb97db..d5a393691 100644
--- a/winsup/cygwin/thread.cc
+++ b/winsup/cygwin/thread.cc
@@ -377,6 +377,8 @@ pthread::exit (void *value_ptr)
mutex.unlock ();
}
+ (_reclaim_reent) (_REENT);
+
if (InterlockedDecrement (&MT_INTERFACE->threadcount) == 0)
::exit (0);
else
@@ -1879,6 +1881,7 @@ __reent_t::init_clib (struct _reent& var)
var._stdout = _GLOBAL_REENT->_stdout;
var._stderr = _GLOBAL_REENT->_stderr;
var.__sdidinit = _GLOBAL_REENT->__sdidinit;
+ var.__cleanup = _GLOBAL_REENT->__cleanup;
_clib = &var;
};