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