From 068834a10fd795d3a4e113341d6c1cc8eb0e2fe7 Mon Sep 17 00:00:00 2001 From: Thomas Pfaff Date: Tue, 11 Nov 2003 19:10:47 +0000 Subject: [PATCH] * thread.cc (pthread::exit): Cleanup on thread exit. (__reent_t::init_clib): Set thread local clib __cleanup var appropriately. --- winsup/cygwin/ChangeLog | 7 +++++++ winsup/cygwin/thread.cc | 3 +++ 2 files changed, 10 insertions(+) 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 + Thomas Pfaff + + * thread.cc (pthread::exit): Cleanup on thread exit. + (__reent_t::init_clib): Set thread local clib __cleanup var + appropriately. + 2003-11-10 Christopher Faylor * 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; };