summaryrefslogtreecommitdiff
path: root/packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch')
-rw-r--r--packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch b/packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch
new file mode 100644
index 0000000..7ad9fdf
--- /dev/null
+++ b/packages/glibc/2.18/110-2770d15-Fix-PI-mutex-check-in-pthread_cond_broadcast-and-pthread_cond_signal.patch
@@ -0,0 +1,78 @@
+commit 2770d15e7e880821fc586619c59eb45180628e16
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date: Thu Oct 3 08:26:21 2013 +0530
+
+ Fix PI mutex check in pthread_cond_broadcast and pthread_cond_signal
+
+ Fixes BZ #15996.
+
+ The check had a typo - it checked for PTHREAD_MUTEX_ROBUST_NP instead
+ of PTHREAD_MUTEX_ROBUST_NORMAL_NP. It has now been replaced by the
+ already existing convenience macro USE_REQUEUE_PI.
+
+diff --git a/NEWS b/NEWS
+index f64fb82..fb6069d 100644
+--- a/NEWS
++++ b/NEWS
+@@ -9,7 +9,7 @@ Version 2.18.1
+
+ * The following bugs are resolved with this release:
+
+- 15909.
++ 15909, 15996.
+
+ Version 2.18
+
+diff --git a/nptl/ChangeLog b/nptl/ChangeLog
+index eae5079..2d78490 100644
+--- a/nptl/ChangeLog
++++ b/nptl/ChangeLog
+@@ -1,3 +1,12 @@
++2013-10-03 Siddhesh Poyarekar <siddhesh@redhat.com>
++
++ [BZ #15996]
++ * pthread_cond_broadcast.c (__pthread_cond_broadcast)
++ [lll_futex_cmp_requeue_pi && __ASSUME_REQUEUE_PI]: Use
++ USE_REQUEUE_PI.
++ * pthread_cond_signal.c (__pthread_cond_signal)
++ [lll_futex_cmd_requeue_pi && __ASSUME_REQUEUE_PI]: Likewise.
++
+ 2013-07-23 David S. Miller <davem@davemloft.net>
+
+ * tst-cancel4.c (WRITE_BUFFER_SIZE): Adjust comment.
+diff --git a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c
+index 0702ec0..7ba9efa 100644
+--- a/nptl/pthread_cond_broadcast.c
++++ b/nptl/pthread_cond_broadcast.c
+@@ -63,10 +63,7 @@ __pthread_cond_broadcast (cond)
+
+ #if (defined lll_futex_cmp_requeue_pi \
+ && defined __ASSUME_REQUEUE_PI)
+- int pi_flag = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_NP;
+- pi_flag &= mut->__data.__kind;
+-
+- if (pi_flag == PTHREAD_MUTEX_PRIO_INHERIT_NP)
++ if (USE_REQUEUE_PI (mut))
+ {
+ if (lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, INT_MAX,
+ &mut->__data.__lock, futex_val,
+diff --git a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c
+index 102d0b3..ffc35dc 100644
+--- a/nptl/pthread_cond_signal.c
++++ b/nptl/pthread_cond_signal.c
+@@ -49,14 +49,9 @@ __pthread_cond_signal (cond)
+
+ #if (defined lll_futex_cmp_requeue_pi \
+ && defined __ASSUME_REQUEUE_PI)
+- int pi_flag = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_NP;
+ pthread_mutex_t *mut = cond->__data.__mutex;
+
+- /* Do not use requeue for pshared condvars. */
+- if (mut != (void *) ~0l)
+- pi_flag &= mut->__data.__kind;
+-
+- if (__builtin_expect (pi_flag == PTHREAD_MUTEX_PRIO_INHERIT_NP, 0)
++ if (USE_REQUEUE_PI (mut)
+ /* This can only really fail with a ENOSYS, since nobody can modify
+ futex while we have the cond_lock. */
+ && lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, 0,