mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 02:40:08 +00:00
Fix PI mutex check in pthread_cond_broadcast and pthread_cond_signal
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.
This commit is contained in:
parent
fd96752258
commit
ad4e70da03
2
NEWS
2
NEWS
@ -13,7 +13,7 @@ Version 2.19
|
|||||||
15608, 15609, 15610, 15640, 15681, 15736, 15748, 15749, 15754, 15797,
|
15608, 15609, 15610, 15640, 15681, 15736, 15748, 15749, 15754, 15797,
|
||||||
15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890,
|
15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890,
|
||||||
15892, 15893, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939,
|
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
|
* CVE-2012-4412 The strcoll implementation caches indices and rules for
|
||||||
large collation sequences to optimize multiple passes. This cache
|
large collation sequences to optimize multiple passes. This cache
|
||||||
|
@ -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>
|
2013-09-27 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||||
|
|
||||||
* sysdeps/pthread/bits/libc-lock.h [_LIBC && (!NOT_IN_libc ||
|
* sysdeps/pthread/bits/libc-lock.h [_LIBC && (!NOT_IN_libc ||
|
||||||
|
@ -63,10 +63,7 @@ __pthread_cond_broadcast (cond)
|
|||||||
|
|
||||||
#if (defined lll_futex_cmp_requeue_pi \
|
#if (defined lll_futex_cmp_requeue_pi \
|
||||||
&& defined __ASSUME_REQUEUE_PI)
|
&& defined __ASSUME_REQUEUE_PI)
|
||||||
int pi_flag = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_NP;
|
if (USE_REQUEUE_PI (mut))
|
||||||
pi_flag &= mut->__data.__kind;
|
|
||||||
|
|
||||||
if (pi_flag == PTHREAD_MUTEX_PRIO_INHERIT_NP)
|
|
||||||
{
|
{
|
||||||
if (lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, INT_MAX,
|
if (lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, INT_MAX,
|
||||||
&mut->__data.__lock, futex_val,
|
&mut->__data.__lock, futex_val,
|
||||||
|
@ -49,14 +49,9 @@ __pthread_cond_signal (cond)
|
|||||||
|
|
||||||
#if (defined lll_futex_cmp_requeue_pi \
|
#if (defined lll_futex_cmp_requeue_pi \
|
||||||
&& defined __ASSUME_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;
|
pthread_mutex_t *mut = cond->__data.__mutex;
|
||||||
|
|
||||||
/* Do not use requeue for pshared condvars. */
|
if (USE_REQUEUE_PI (mut)
|
||||||
if (mut != (void *) ~0l)
|
|
||||||
pi_flag &= mut->__data.__kind;
|
|
||||||
|
|
||||||
if (__builtin_expect (pi_flag == PTHREAD_MUTEX_PRIO_INHERIT_NP, 0)
|
|
||||||
/* This can only really fail with a ENOSYS, since nobody can modify
|
/* This can only really fail with a ENOSYS, since nobody can modify
|
||||||
futex while we have the cond_lock. */
|
futex while we have the cond_lock. */
|
||||||
&& lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, 0,
|
&& lll_futex_cmp_requeue_pi (&cond->__data.__futex, 1, 0,
|
||||||
|
Loading…
Reference in New Issue
Block a user