aboutsummaryrefslogtreecommitdiff
path: root/nptl/old_pthread_cond_signal.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-04 09:45:01 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-04 09:45:01 +0000
commit29bc410c29ee2185bf91bf5fa923d8646ee9d501 (patch)
tree69cc5f9a071a5e1ab55d06cd5c222cc20ebae6b3 /nptl/old_pthread_cond_signal.c
parentd27a78be343159b2a1b8e3856f3c51fdd0162c35 (diff)
downloadglibc-29bc410c29ee2185bf91bf5fa923d8646ee9d501.tar
glibc-29bc410c29ee2185bf91bf5fa923d8646ee9d501.tar.gz
glibc-29bc410c29ee2185bf91bf5fa923d8646ee9d501.tar.bz2
glibc-29bc410c29ee2185bf91bf5fa923d8646ee9d501.zip
Update.
* old_pthread_cond_broadcast.c: Optimize initialization a bit to work around gcc defficiencies. * 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_signal.c')
-rw-r--r--nptl/old_pthread_cond_signal.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/nptl/old_pthread_cond_signal.c b/nptl/old_pthread_cond_signal.c
index c646b4dd40..ae54209e4a 100644
--- a/nptl/old_pthread_cond_signal.c
+++ b/nptl/old_pthread_cond_signal.c
@@ -33,13 +33,18 @@ __pthread_cond_signal_2_0 (cond)
{
pthread_cond_t *newcond;
+#if LLL_MUTEX_LOCK_INITIALIZER == 0
+ newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
+ if (newcond == NULL)
+ return ENOMEM;
+#else
newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
if (newcond == NULL)
return ENOMEM;
- *newcond = (pthread_cond_t) PTHREAD_COND_INITIALIZER;
-
- atomic_write_barrier ();
+ /* Initialize the condvar. */
+ (void) pthread_cond_init (newcond, NULL);
+#endif
if (atomic_compare_and_exchange_acq (&cond->cond, newcond, NULL) != 0)
/* Somebody else just initialized the condvar. */