From da6a08decb95746b85f4562c2d3ac921eed9d91b Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Fri, 27 Sep 2002 15:08:50 +0000 Subject: 2002-09-27 Robert Collins * thread.cc (pthread_key::run_destructor): Run_destructor is not const as it needs to set the key value. * thread.h (pthread_key::run_destructor): Ditto. 2002-09-27 Robert Collins * thread.cc (pthread_key::run_destructor): Follow opengroup algorithm. I.e. only run the destructor NON-NULL key values, and reset the key to NULL before running the destructor. Reported by Thomas Pfaff. --- winsup/cygwin/thread.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'winsup/cygwin/thread.cc') diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index 3ee11f1e9..6b05cffb2 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -1035,10 +1035,17 @@ pthread_key::recreateKeyFromBuffer () } void -pthread_key::run_destructor () const +pthread_key::run_destructor () { - if (destructor) - destructor (get ()); + if (destructor) + { + void *oldValue = get(); + if (oldValue) + { + set (NULL); + destructor (oldValue); + } + } } /*pshared mutexs: -- cgit v1.2.3