Fix PI mutex check in pthread_cond_broadcast and pthread_cond_signal
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Tue, 1 Oct 2013 15:05:28 +0000 (20:35 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Tue, 1 Oct 2013 15:05:28 +0000 (20:35 +0530)
Fixes BZ #15988.

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.

NEWS
nptl/ChangeLog
nptl/pthread_cond_broadcast.c
nptl/pthread_cond_signal.c

diff --git a/NEWS b/NEWS
index acd0ca5..37b2a11 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -13,7 +13,7 @@ Version 2.19
   15608, 15609, 15610, 15640, 15681, 15736, 15748, 15749, 15754, 15797,
   15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890,
   15892, 15893, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939,
-  15963, 15966.
+  15963, 15966, 15988.
 
 * CVE-2012-4412 The strcoll implementation caches indices and rules for
   large collation sequences to optimize multiple passes.  This cache
index 9f25dfe..29469fc 100644 (file)
@@ -1,3 +1,12 @@
+2013-10-01  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       [BZ #15988]
+       * 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-09-27  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
        * sysdeps/pthread/bits/libc-lock.h [_LIBC && (!NOT_IN_libc ||
index 0702ec0..7ba9efa 100644 (file)
@@ -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,
index 102d0b3..ffc35dc 100644 (file)
@@ -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,