diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-01-03 19:13:49 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-01-03 19:13:49 +0000 |
commit | 997256dd68532c45c5f1d7e87acffcce8f195476 (patch) | |
tree | 1e35f8bcc487d7be4a09f7405105db5c6f98c020 /nptl/old_pthread_cond_broadcast.c | |
parent | 8439150e8a3fe76e936e8b258d853633ceb2c3e2 (diff) | |
download | glibc-997256dd68532c45c5f1d7e87acffcce8f195476.zip glibc-997256dd68532c45c5f1d7e87acffcce8f195476.tar.gz glibc-997256dd68532c45c5f1d7e87acffcce8f195476.tar.bz2 |
Update.
* pthreadP.h (pthread_cond_2_0_t): New type.
(struct pthread_functions): Use new type for 2.0 condvar callbacks.
Use new type for the 2.0 condvar function prototypes.
* forward.c: Use pthread_cond_2_0_t for 2.0 condvar functions.
* old_pthread_cond_init.c: Use pthread_cond_2_0_t for condvar
parameter.
* old_pthread_cond_destroy.c: Likewise.
* old_pthread_cond_broadcast.c: Likewise. Lock appropriately.
* old_pthread_cond_signal.c: Likewise.
* old_pthread_cond_timedwait.c: Likewise.
* old_pthread_cond_wait.c: Likewise.
Diffstat (limited to 'nptl/old_pthread_cond_broadcast.c')
-rw-r--r-- | nptl/old_pthread_cond_broadcast.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c index 86f8d5d..a9713f5 100644 --- a/nptl/old_pthread_cond_broadcast.c +++ b/nptl/old_pthread_cond_broadcast.c @@ -20,26 +20,32 @@ #include <errno.h> #include <stdlib.h> #include "pthreadP.h" +#include <lowlevellock.h> #include <shlib-compat.h> #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2) int __pthread_cond_broadcast_2_0 (cond) - pthread_cond_t *cond; + pthread_cond_2_0_t *cond; { - pthread_cond_t **realp = (pthread_cond_t **) cond; - - if (*realp == NULL) + if (cond->cond == NULL) { - *realp = (pthread_cond_t *) malloc (sizeof (pthread_cond_t)); - if (*realp == NULL) + lll_mutex_lock (cond->lock); + + /* Check whether the condvar is still not allocated. */ + if (cond->cond == NULL) + cond->cond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t)); + + lll_mutex_unlock (cond->lock); + + if (cond->cond == NULL) return ENOMEM; - **realp = (struct pthread_cond_t) PTHREAD_COND_INITIALIZER; + *cond->cond = (struct pthread_cond_t) PTHREAD_COND_INITIALIZER; } - return __pthread_cond_broadcast (*realp); + return __pthread_cond_broadcast (cond->cond); } compat_symbol (libpthread, __pthread_cond_broadcast_2_0, pthread_cond_broadcast, GLIBC_2_0); |