From ea48e2c4cc0b0a5e09e9407c9309d4a85926e8b7 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 14 Apr 1999 23:49:40 +0000 Subject: Update. 1999-04-14 Andreas Jaeger * wctype/test_wcfuncs.c: New file, tests towlower and towupper. * wctype/Makefile (tests): Add test_wcfuncs. --- linuxthreads/ChangeLog | 5 +++++ linuxthreads/specific.c | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'linuxthreads') diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 363712f8e6..d982e5f1c6 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,8 @@ +1999-03-16 H.J. Lu + + * specific.c (pthread_key_delete): Check th->p_terminated to see + if the thread is running. + 1999-02-12 H.J. Lu * Versions (__libc_current_sigrtmin, __libc_current_sigrtmax, diff --git a/linuxthreads/specific.c b/linuxthreads/specific.c index 674353dd39..1dafecc2e8 100644 --- a/linuxthreads/specific.c +++ b/linuxthreads/specific.c @@ -73,14 +73,15 @@ int pthread_key_delete(pthread_key_t key) } pthread_keys[key].in_use = 0; pthread_keys[key].destr = NULL; - /* Set the value of the key to NULL in all running threads, so that - if the key is reallocated later by pthread_key_create, its + /* Set the value of the key to NULL in all running threads, so + that if the key is reallocated later by pthread_key_create, its associated values will be NULL in all threads. */ idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE; idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE; th = self; do { - if (th->p_specific[idx1st] != NULL) + /* If the thread already is terminated don't modify the memory. */ + if (!th->p_terminated && th->p_specific[idx1st] != NULL) th->p_specific[idx1st][idx2nd] = NULL; th = th->p_nextlive; } while (th != self); -- cgit 1.4.1