diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-10-10 12:17:27 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-10-10 12:52:56 +0530 |
commit | 0e3b5d6a6859d74a18033d3a55e0ee92340437b3 (patch) | |
tree | b4f8c7fe139fb80e4fba77409942b68942a5df48 /nptl/ChangeLog | |
parent | f96f12423a1b801f4a198f2568e29e85bd9cc473 (diff) | |
download | glibc-0e3b5d6a6859d74a18033d3a55e0ee92340437b3.zip glibc-0e3b5d6a6859d74a18033d3a55e0ee92340437b3.tar.gz glibc-0e3b5d6a6859d74a18033d3a55e0ee92340437b3.tar.bz2 |
Take lock in pthread_cond_wait cleanup handler only when needed
[BZ #14652]
When a thread waiting in pthread_cond_wait with a PI mutex is
cancelled after it has returned successfully from the futex syscall
but just before async cancellation is disabled, it enters its
cancellation handler with the mutex held and simply calling a
mutex_lock again will result in a deadlock. Hence, it is necessary to
see if the thread owns the lock and try to lock it only if it doesn't.
Diffstat (limited to 'nptl/ChangeLog')
-rw-r--r-- | nptl/ChangeLog | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 9eeeeb1..01ad0b9 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,21 @@ +2012-10-10 Siddhesh Poyarekar <siddhesh@redhat.com> + + [BZ #14652] + * Makefile (tests): New test case tst-cond25. + (LDFLAGS-tst-cond25): Link tst-cond25 against librt. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S + (__condvar_tw_cleanup): Lock mutex only if we don't already + own it. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S + (__condvar_w_cleanup): Likewise. + * sysdeps/unix/sysv/linux/pthread-pi-defines.sym: Add TID_MASK. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S + (__condvar_cleanup2): Lock mutex only if we don't already + own it. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S + (__condvar_cleanup1): Likewise. + * tst-cond25.c: New test case. + 2012-10-09 Roland McGrath <roland@hack.frob.com> * sysdeps/pthread/configure: Regenerated. |