]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix PI mutex check in pthread_cond_broadcast and pthread_cond_signal
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 3 Oct 2013 02:56:21 +0000 (08:26 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 3 Oct 2013 02:56:21 +0000 (08:26 +0530)
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.

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

diff --git a/NEWS b/NEWS
index f64fb8225f72a82e689858bba8c12b490efe9fa6..fb6069d4d71120719ab043e6182938447baa2f12 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,7 @@ Version 2.18.1
 
 * The following bugs are resolved with this release:
 
-  15909.
+  15909, 15996.
 \f
 Version 2.18
 
index eae507965f3cc792022da898bd5bb9fa2aa2d084..2d78490863d6a01079b9eb7dd3082193671a0011 100644 (file)
@@ -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.
index 0702ec0ec2bb644867c63cf38a2f122d73925ad9..7ba9efa0c0b5c9937af47b8deb04ecc87d1b44ab 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 102d0b380ce73ec28c1b07b8b70e62d2daed1457..ffc35dc9e1ff292d68c43be87924b8bea7fa3c73 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,