View | Details | Raw Unified | Return to bug 237195
Collapse All | Expand All

(-)b/lib/libthr/thread/thr_mutex.c (-2 / +3 lines)
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
}

Return to bug 237195