diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-02-08 10:05:09 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2005-02-08 10:05:09 +0000 |
commit | d585b66fa4d11059948f466c9080a6826932358d (patch) | |
tree | 8b06692920852c297635b46a7d616c3066f95fac /linuxthreads/specific.c | |
parent | e7cbcee4982d8caa809a91c9cfef5fda67445f0a (diff) | |
download | glibc-d585b66fa4d11059948f466c9080a6826932358d.tar.gz glibc-d585b66fa4d11059948f466c9080a6826932358d.tar.xz glibc-d585b66fa4d11059948f466c9080a6826932358d.zip |
Updated to fedora-glibc-20050208T0948 cvs/fedora-glibc-2_3_4-6
Diffstat (limited to 'linuxthreads/specific.c')
-rw-r--r-- | linuxthreads/specific.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/linuxthreads/specific.c b/linuxthreads/specific.c index f54fabaeb9..92eec3d99a 100644 --- a/linuxthreads/specific.c +++ b/linuxthreads/specific.c @@ -104,15 +104,16 @@ int pthread_key_delete(pthread_key_t key) that if the key is reallocated later by pthread_key_create, its associated values will be NULL in all threads. - Do nothing if no threads have been created yet. */ + If no threads have been created yet, clear it just in the + current thread. */ + struct pthread_key_delete_helper_args args; + args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE; + args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE; if (__pthread_manager_request != -1) { - struct pthread_key_delete_helper_args args; struct pthread_request request; - args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE; - args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE; args.self = 0; request.req_thread = self; @@ -124,6 +125,11 @@ int pthread_key_delete(pthread_key_t key) (char *) &request, sizeof(request))); suspend(self); } + else + { + if (self->p_specific[args.idx1st] != NULL) + self->p_specific[args.idx1st][args.idx2nd] = NULL; + } pthread_mutex_unlock(&pthread_keys_mutex); return 0; |