Fix lll_unlock twice in pthread_cond_broadcast

lll_unlock() will be called again if it goes to "wake_all" in
pthread_cond_broadcast(). This may make another thread which is
waiting for lock in pthread_cond_timedwait() unlock.  So there are
more than one threads get the lock, it will break the shared data.

It's introduced by commit 8313cb997d2d("FUTEX_*_REQUEUE_PI support for
non-x86 code")
This commit is contained in:
Yang Yingliang 2014-04-30 15:46:18 +05:30 committed by Siddhesh Poyarekar
parent bc8f194c8c
commit 8f630cca5c
2 changed files with 6 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2014-04-30 Yang Yingliang <yangyingliang@huawei.com>
* nptl/pthread_cond_broadcast.c (__pthread_cond_broadcast):
Return immediately after lll_futex_wake.
2014-04-30 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #16791]

View File

@ -81,6 +81,7 @@ __pthread_cond_broadcast (cond)
wake_all:
lll_futex_wake (&cond->__data.__futex, INT_MAX, pshared);
return 0;
}
/* We are done. */