diff --git a/sched/semaphore/sem_post.c b/sched/semaphore/sem_post.c index d63d3fb2aa..352a583929 100644 --- a/sched/semaphore/sem_post.c +++ b/sched/semaphore/sem_post.c @@ -259,8 +259,11 @@ int nxsem_post(FAR sem_t *sem) * else try to get it in slow mode. */ -#if !defined(CONFIG_PRIORITY_INHERITANCE) && !defined(CONFIG_PRIORITY_PROTECT) - if (sem->flags & SEM_TYPE_MUTEX) + if ((sem->flags & SEM_TYPE_MUTEX) +#if defined(CONFIG_PRIORITY_PROTECT) || defined(CONFIG_PRIORITY_INHERITANCE) + && (sem->flags & SEM_PRIO_MASK) == SEM_PRIO_NONE +#endif + ) { int32_t old = 0; if (atomic_try_cmpxchg_release(NXSEM_COUNT(sem), &old, 1)) @@ -268,7 +271,6 @@ int nxsem_post(FAR sem_t *sem) return OK; } } -#endif return nxsem_post_slow(sem); } diff --git a/sched/semaphore/sem_trywait.c b/sched/semaphore/sem_trywait.c index fed759db0f..740f9d441d 100644 --- a/sched/semaphore/sem_trywait.c +++ b/sched/semaphore/sem_trywait.c @@ -144,8 +144,11 @@ int nxsem_trywait(FAR sem_t *sem) * else try to get it in slow mode. */ -#if !defined(CONFIG_PRIORITY_INHERITANCE) && !defined(CONFIG_PRIORITY_PROTECT) - if (sem->flags & SEM_TYPE_MUTEX) + if ((sem->flags & SEM_TYPE_MUTEX) +#if defined(CONFIG_PRIORITY_PROTECT) || defined(CONFIG_PRIORITY_INHERITANCE) + && (sem->flags & SEM_PRIO_MASK) == SEM_PRIO_NONE +#endif + ) { int32_t old = 1; if (atomic_try_cmpxchg_acquire(NXSEM_COUNT(sem), &old, 0)) @@ -155,7 +158,6 @@ int nxsem_trywait(FAR sem_t *sem) return -EAGAIN; } -#endif return nxsem_trywait_slow(sem); } diff --git a/sched/semaphore/sem_wait.c b/sched/semaphore/sem_wait.c index 5cd14b728f..4e9484f856 100644 --- a/sched/semaphore/sem_wait.c +++ b/sched/semaphore/sem_wait.c @@ -265,8 +265,11 @@ int nxsem_wait(FAR sem_t *sem) * else try to get it in slow mode. */ -#if !defined(CONFIG_PRIORITY_INHERITANCE) && !defined(CONFIG_PRIORITY_PROTECT) - if (sem->flags & SEM_TYPE_MUTEX) + if ((sem->flags & SEM_TYPE_MUTEX) +#if defined(CONFIG_PRIORITY_PROTECT) || defined(CONFIG_PRIORITY_INHERITANCE) + && (sem->flags & SEM_PRIO_MASK) == SEM_PRIO_NONE +#endif + ) { int32_t old = 1; if (atomic_try_cmpxchg_acquire(NXSEM_COUNT(sem), &old, 0)) @@ -274,7 +277,6 @@ int nxsem_wait(FAR sem_t *sem) return OK; } } -#endif return nxsem_wait_slow(sem); }