diff options
Diffstat (limited to 'lib/libpthread/pthread_specific.c')
| -rw-r--r-- | lib/libpthread/pthread_specific.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/lib/libpthread/pthread_specific.c b/lib/libpthread/pthread_specific.c index e95aa5e37a8..8ed1fc26d04 100644 --- a/lib/libpthread/pthread_specific.c +++ b/lib/libpthread/pthread_specific.c @@ -1,4 +1,4 @@ -/* $NetBSD: pthread_specific.c,v 1.3 2003/01/18 18:45:57 christos Exp $ */ +/* $NetBSD: pthread_specific.c,v 1.4 2003/01/21 23:29:22 nathanw Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -243,15 +243,16 @@ pthread__destroy_tsd(pthread_t self) do { done = 1; for (i = 0; i < PTHREAD_KEYS_MAX; i++) { - pthread_mutex_lock(&tsd_mutex); - destructor = pthread__tsd_destructors[i]; - pthread_mutex_unlock(&tsd_mutex); - if ((self->pt_specific[i] != NULL) && - destructor != NULL) { - done = 0; - val = self->pt_specific[i]; - self->pt_specific[i] = NULL; /* see above */ - (*destructor)(val); + if (self->pt_specific[i] != NULL) { + pthread_mutex_lock(&tsd_mutex); + destructor = pthread__tsd_destructors[i]; + pthread_mutex_unlock(&tsd_mutex); + if (destructor != NULL) { + done = 0; + val = self->pt_specific[i]; + self->pt_specific[i] = NULL; /* see above */ + (*destructor)(val); + } } } } while (!done && iterations--); |
