summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/pthread/pthread_cond_wait.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-18 18:56:16 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-18 18:56:16 +0000
commit24a49f38ad4f05aca5d4b55b2bc1ac31347342ce (patch)
tree4ea12aecc7307ff8f68b04002196da07928b0300 /nptl/sysdeps/pthread/pthread_cond_wait.c
parentd5cb838958b610de0bef12722860030eec964aaf (diff)
Update.
* sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h (pthrad_cond_t): Replace __unused field with __clock. * sysdeps/pthread/pthread_cond_wait.c: Release condvar lock before waken all waiters in cleanup handler. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
Diffstat (limited to 'nptl/sysdeps/pthread/pthread_cond_wait.c')
-rw-r--r--nptl/sysdeps/pthread/pthread_cond_wait.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/nptl/sysdeps/pthread/pthread_cond_wait.c b/nptl/sysdeps/pthread/pthread_cond_wait.c
index 412bca9c25..708566be03 100644
--- a/nptl/sysdeps/pthread/pthread_cond_wait.c
+++ b/nptl/sysdeps/pthread/pthread_cond_wait.c
@@ -50,6 +50,9 @@ __condvar_cleanup (void *arg)
++cbuffer->cond->__data.__wakeup_seq;
++cbuffer->cond->__data.__woken_seq;
+ /* We are done. */
+ lll_mutex_unlock (cbuffer->cond->__data.__lock);
+
/* Wake everybody to make sure no condvar signal gets lost. */
#if BYTE_ORDER == LITTLE_ENDIAN
int *futex = ((int *) (&cbuffer->cond->__data.__wakeup_seq));
@@ -60,9 +63,6 @@ __condvar_cleanup (void *arg)
#endif
lll_futex_wake (futex, INT_MAX);
- /* We are done. */
- lll_mutex_unlock (cbuffer->cond->__data.__lock);
-
/* Get the mutex before returning unless asynchronous cancellation
is in effect. */
if (!(cbuffer->oldtype & CANCELTYPE_BITMASK))