Lines 949-955
mutex_unlock_common(struct pthread_mutex *m, bool cv, int *mtx_defer)
Link Here
|
949 |
{ |
949 |
{ |
950 |
struct pthread *curthread; |
950 |
struct pthread *curthread; |
951 |
uint32_t id; |
951 |
uint32_t id; |
952 |
int deferred, error, robust; |
952 |
int deferred, error, private, robust; |
953 |
|
953 |
|
954 |
if (__predict_false(m <= THR_MUTEX_DESTROYED)) { |
954 |
if (__predict_false(m <= THR_MUTEX_DESTROYED)) { |
955 |
if (m == THR_MUTEX_DESTROYED) |
955 |
if (m == THR_MUTEX_DESTROYED) |
Lines 967-972
mutex_unlock_common(struct pthread_mutex *m, bool cv, int *mtx_defer)
Link Here
|
967 |
return (EPERM); |
967 |
return (EPERM); |
968 |
|
968 |
|
969 |
error = 0; |
969 |
error = 0; |
|
|
970 |
private = (m->m_flags & PMUTEX_FLAG_PRIVATE) != 0; |
970 |
if (__predict_false(PMUTEX_TYPE(m->m_flags) == |
971 |
if (__predict_false(PMUTEX_TYPE(m->m_flags) == |
971 |
PTHREAD_MUTEX_RECURSIVE && m->m_count > 0)) { |
972 |
PTHREAD_MUTEX_RECURSIVE && m->m_count > 0)) { |
972 |
m->m_count--; |
973 |
m->m_count--; |
Lines 991-997
mutex_unlock_common(struct pthread_mutex *m, bool cv, int *mtx_defer)
Link Here
|
991 |
if (robust) |
992 |
if (robust) |
992 |
_mutex_leave_robust(curthread, m); |
993 |
_mutex_leave_robust(curthread, m); |
993 |
} |
994 |
} |
994 |
if (!cv && m->m_flags & PMUTEX_FLAG_PRIVATE) |
995 |
if (!cv && private) |
995 |
THR_CRITICAL_LEAVE(curthread); |
996 |
THR_CRITICAL_LEAVE(curthread); |
996 |
return (error); |
997 |
return (error); |
997 |
} |
998 |
} |