mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Fix synchronization of TPP min/max priorities.
* nptl/tpp.c (__init_sched_fifo_prio, __pthread_tpp_change_priority): Change synchronization of __sched_fifo_min_prio and __sched_fifo_max_prio. * nptl/pthread_mutexattr_getprioceiling.c (pthread_mutexattr_getprioceiling): Likewise. * nptl/pthread_mutexattr_setprioceiling.c (pthread_mutexattr_setprioceiling): Likewise. * nptl/pthread_mutex_init.c (__pthread_mutex_init): Likewise. * nptl/pthread_mutex_setprioceiling.c (pthread_mutex_setprioceiling): Likewise.
This commit is contained in:
@ -20,6 +20,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <errno.h>
|
||||
#include <pthreadP.h>
|
||||
#include <atomic.h>
|
||||
|
||||
|
||||
int
|
||||
@ -33,15 +34,19 @@ pthread_mutex_setprioceiling (mutex, prioceiling, old_ceiling)
|
||||
if ((mutex->__data.__kind & PTHREAD_MUTEX_PRIO_PROTECT_NP) == 0)
|
||||
return EINVAL;
|
||||
|
||||
if (__sched_fifo_min_prio == -1)
|
||||
/* See __init_sched_fifo_prio. */
|
||||
if (atomic_load_relaxed (&__sched_fifo_min_prio) == -1
|
||||
|| atomic_load_relaxed (&__sched_fifo_max_prio) == -1)
|
||||
__init_sched_fifo_prio ();
|
||||
|
||||
if (__builtin_expect (prioceiling < __sched_fifo_min_prio, 0)
|
||||
|| __builtin_expect (prioceiling > __sched_fifo_max_prio, 0)
|
||||
|| __builtin_expect ((prioceiling
|
||||
if (__glibc_unlikely (prioceiling
|
||||
< atomic_load_relaxed (&__sched_fifo_min_prio))
|
||||
|| __glibc_unlikely (prioceiling
|
||||
> atomic_load_relaxed (&__sched_fifo_max_prio))
|
||||
|| __glibc_unlikely ((prioceiling
|
||||
& (PTHREAD_MUTEXATTR_PRIO_CEILING_MASK
|
||||
>> PTHREAD_MUTEXATTR_PRIO_CEILING_SHIFT))
|
||||
!= prioceiling, 0))
|
||||
!= prioceiling))
|
||||
return EINVAL;
|
||||
|
||||
/* Check whether we already hold the mutex. */
|
||||
|
Reference in New Issue
Block a user