about summary refs log tree commit diff
path: root/nptl/sysdeps/pthread/pthread_cond_wait.c
diff options
context:
space:
mode:
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))