aboutsummaryrefslogtreecommitdiff
path: root/nptl/old_pthread_cond_broadcast.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-03 19:13:49 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-03 19:13:49 +0000
commit997256dd68532c45c5f1d7e87acffcce8f195476 (patch)
tree1e35f8bcc487d7be4a09f7405105db5c6f98c020 /nptl/old_pthread_cond_broadcast.c
parent8439150e8a3fe76e936e8b258d853633ceb2c3e2 (diff)
downloadglibc-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.c22
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);