Adjust mutex lock in condvar_cleanup if we got it from requeue_pi
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Tue, 16 Oct 2012 08:53:01 +0000 (14:23 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Tue, 16 Oct 2012 08:53:35 +0000 (14:23 +0530)
This completes the fix to bz #14652.

nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S

index 43c5b45..4553250 100644 (file)
@@ -1,3 +1,16 @@
+2012-10-16  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       [BZ #14652]
+       * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+       (__condvar_tw_cleanup):  Adjust the mutex data structure if it
+       was locked by FUTEX_WAIT_REQUEUE_PI.
+       * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait
+       (__condvar_w_cleanup): Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+       (__condvar_cleanup2): Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+       (__condvar_cleanup1): Likewise.
+
 2012-10-10  Carlos O'Donell  <carlos@systemhalted.org>
 
        * sysdeps/pthread/pthread.h [!(defined __GNUC__ &&
index 884987c..6011f69 100644 (file)
@@ -662,7 +662,10 @@ __condvar_tw_cleanup:
        movl    (%eax), %ebx
        andl    $TID_MASK, %ebx
        cmpl    %ebx, %gs:TID
-       je      9f
+       jne     8f
+       /* We managed to get the lock.  Fix it up before returning.  */
+       call    __pthread_mutex_cond_lock_adjust
+       jmp     9f
 
 8:     call    __pthread_mutex_cond_lock
 
index bf1e5fe..b418be3 100644 (file)
@@ -579,7 +579,10 @@ __condvar_w_cleanup:
        movl    (%eax), %ebx
        andl    $TID_MASK, %ebx
        cmpl    %ebx, %gs:TID
-       je      9f
+       jne     8f
+       /* We managed to get the lock.  Fix it up before returning.  */
+       call    __pthread_mutex_cond_lock_adjust
+       jmp     9f
 
 8:     call    __pthread_mutex_cond_lock
 
index eb13326..15e451a 100644 (file)
@@ -784,7 +784,10 @@ __condvar_cleanup2:
        movl    (%rdi), %eax
        andl    $TID_MASK, %eax
        cmpl    %eax, %fs:TID
-       je      8f
+       jne     7f
+       /* We managed to get the lock.  Fix it up before returning.  */
+       callq   __pthread_mutex_cond_lock_adjust
+       jmp     8f
 
 7:     callq   __pthread_mutex_cond_lock
 
index 6c6dc0e..2c6b515 100644 (file)
@@ -508,7 +508,11 @@ __condvar_cleanup1:
        movl    (%rdi), %eax
        andl    $TID_MASK, %eax
        cmpl    %eax, %fs:TID
-       je      8f
+       jne     7f
+       /* We managed to get the lock.  Fix it up before returning.  */
+       callq   __pthread_mutex_cond_lock_adjust
+       jmp     8f
+
 
 7:     callq   __pthread_mutex_cond_lock