aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-04-14 23:49:40 +0000
committerUlrich Drepper <drepper@redhat.com>1999-04-14 23:49:40 +0000
commitea48e2c4cc0b0a5e09e9407c9309d4a85926e8b7 (patch)
tree56f88f516b741d852200b86b6c2dc9ecb785dd6a /linuxthreads
parent613ae2c8ee6e332a6963d9960518d36e8cc312c3 (diff)
downloadglibc-ea48e2c4cc0b0a5e09e9407c9309d4a85926e8b7.zip
glibc-ea48e2c4cc0b0a5e09e9407c9309d4a85926e8b7.tar.gz
glibc-ea48e2c4cc0b0a5e09e9407c9309d4a85926e8b7.tar.bz2
Update.
1999-04-14 Andreas Jaeger <aj@arthur.rhein-neckar.de> * wctype/test_wcfuncs.c: New file, tests towlower and towupper. * wctype/Makefile (tests): Add test_wcfuncs.
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog5
-rw-r--r--linuxthreads/specific.c7
2 files changed, 9 insertions, 3 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 363712f..d982e5f 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,8 @@
+1999-03-16 H.J. Lu <hjl@gnu.org>
+
+ * specific.c (pthread_key_delete): Check th->p_terminated to see
+ if the thread is running.
+
1999-02-12 H.J. Lu <hjl@gnu.org>
* Versions (__libc_current_sigrtmin, __libc_current_sigrtmax,
diff --git a/linuxthreads/specific.c b/linuxthreads/specific.c
index 674353d..1dafecc 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);