From 997256dd68532c45c5f1d7e87acffcce8f195476 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 3 Jan 2003 19:13:49 +0000 Subject: 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. --- nptl/old_pthread_cond_signal.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'nptl/old_pthread_cond_signal.c') diff --git a/nptl/old_pthread_cond_signal.c b/nptl/old_pthread_cond_signal.c index 869ac4d235..952ee6de41 100644 --- a/nptl/old_pthread_cond_signal.c +++ b/nptl/old_pthread_cond_signal.c @@ -26,20 +26,25 @@ #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2) int __pthread_cond_signal_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_signal (*realp); + return __pthread_cond_signal (cond->cond); } compat_symbol (libpthread, __pthread_cond_signal_2_0, pthread_cond_signal, GLIBC_2_0); -- cgit v1.2.3