Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libthr/thread/thr_mutex.c
Show First 20 Lines • Show All 300 Lines • ▼ Show 20 Lines | |||||
static int | static int | ||||
init_static(struct pthread *thread, pthread_mutex_t *mutex) | init_static(struct pthread *thread, pthread_mutex_t *mutex) | ||||
{ | { | ||||
int ret; | int ret; | ||||
THR_LOCK_ACQUIRE(thread, &_mutex_static_lock); | THR_LOCK_ACQUIRE(thread, &_mutex_static_lock); | ||||
if (*mutex == THR_MUTEX_INITIALIZER) | if (*mutex == THR_MUTEX_INITIALIZER) | ||||
ret = mutex_init(mutex, &_pthread_mutexattr_default, calloc); | ret = mutex_init(mutex, &_pthread_mutexattr_default, | ||||
__thr_calloc); | |||||
else if (*mutex == THR_ADAPTIVE_MUTEX_INITIALIZER) | else if (*mutex == THR_ADAPTIVE_MUTEX_INITIALIZER) | ||||
ret = mutex_init(mutex, &_pthread_mutexattr_adaptive_default, | ret = mutex_init(mutex, &_pthread_mutexattr_adaptive_default, | ||||
calloc); | __thr_calloc); | ||||
else | else | ||||
ret = 0; | ret = 0; | ||||
THR_LOCK_RELEASE(thread, &_mutex_static_lock); | THR_LOCK_RELEASE(thread, &_mutex_static_lock); | ||||
return (ret); | return (ret); | ||||
} | } | ||||
static void | static void | ||||
▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | __pthread_mutex_init(pthread_mutex_t * __restrict mutex, | ||||
if (mutex_attr != NULL) { | if (mutex_attr != NULL) { | ||||
ret = mutex_check_attr(*mutex_attr); | ret = mutex_check_attr(*mutex_attr); | ||||
if (ret != 0) | if (ret != 0) | ||||
return (ret); | return (ret); | ||||
} | } | ||||
if (mutex_attr == NULL || | if (mutex_attr == NULL || | ||||
(*mutex_attr)->m_pshared == PTHREAD_PROCESS_PRIVATE) { | (*mutex_attr)->m_pshared == PTHREAD_PROCESS_PRIVATE) { | ||||
return (mutex_init(mutex, mutex_attr ? *mutex_attr : NULL, | return (mutex_init(mutex, mutex_attr ? *mutex_attr : NULL, | ||||
calloc)); | __thr_calloc)); | ||||
} | } | ||||
pmtx = __thr_pshared_offpage(__DECONST(void *, mutex), 1); | pmtx = __thr_pshared_offpage(__DECONST(void *, mutex), 1); | ||||
if (pmtx == NULL) | if (pmtx == NULL) | ||||
return (EFAULT); | return (EFAULT); | ||||
*mutex = THR_PSHARED_PTR; | *mutex = THR_PSHARED_PTR; | ||||
shared_mutex_init(pmtx, *mutex_attr); | shared_mutex_init(pmtx, *mutex_attr); | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | if (m == THR_PSHARED_PTR) { | ||||
return (0); | return (0); | ||||
} | } | ||||
if (PMUTEX_OWNER_ID(m) != 0 && | if (PMUTEX_OWNER_ID(m) != 0 && | ||||
(uint32_t)m->m_lock.m_owner != UMUTEX_RB_NOTRECOV) { | (uint32_t)m->m_lock.m_owner != UMUTEX_RB_NOTRECOV) { | ||||
ret = EBUSY; | ret = EBUSY; | ||||
} else { | } else { | ||||
*mutex = THR_MUTEX_DESTROYED; | *mutex = THR_MUTEX_DESTROYED; | ||||
mutex_assert_not_owned(_get_curthread(), m); | mutex_assert_not_owned(_get_curthread(), m); | ||||
free(m); | __thr_free(m); | ||||
ret = 0; | ret = 0; | ||||
} | } | ||||
} | } | ||||
return (ret); | return (ret); | ||||
} | } | ||||
static int | static int | ||||
▲ Show 20 Lines • Show All 696 Lines • Show Last 20 Lines |