27 lines
924 B
Diff
27 lines
924 B
Diff
commit 8f630cca5c36941db1cb48726016bbed80ec1041
|
|
Author: Yang Yingliang <yangyingliang@huawei.com>
|
|
Date: Wed Apr 30 15:46:18 2014 +0530
|
|
|
|
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")
|
|
|
|
diff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c
|
|
index ed30e7c..7c6c9ea 100644
|
|
--- a/nptl/pthread_cond_broadcast.c
|
|
+++ b/nptl/pthread_cond_broadcast.c
|
|
@@ -81,6 +81,7 @@ __pthread_cond_broadcast (cond)
|
|
|
|
wake_all:
|
|
lll_futex_wake (&cond->__data.__futex, INT_MAX, pshared);
|
|
+ return 0;
|
|
}
|
|
|
|
/* We are done. */
|