From 9485a404440e392dbcfdc157bbdf5c863f9c0fce Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Tue, 16 Oct 2012 14:23:01 +0530 Subject: Adjust mutex lock in condvar_cleanup if we got it from requeue_pi This completes the fix to bz #14652. --- nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S | 5 ++++- nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S | 5 ++++- nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S | 5 ++++- nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S | 6 +++++- 4 files changed, 17 insertions(+), 4 deletions(-) (limited to 'nptl/sysdeps/unix/sysv') diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S index 884987cf50..6011f69f12 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S @@ -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 diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S index bf1e5fe788..b418be3c41 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S @@ -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 diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S index eb133266c6..15e451a51c 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S @@ -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 diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S index 6c6dc0e74d..2c6b515d83 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S @@ -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 -- cgit v1.2.3-70-g09d2