Lines Matching defs:mutex
129 /* Initialize mutex. If mutexAttr is NULL, use default attributes. */
130 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexAttr)
140 if (mutex == NULL) {
155 mutex->stAttr = useAttr;
156 mutex->magic = _MUX_MAGIC;
157 mutex->handle = muxHandle;
159 OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
165 int pthread_mutex_destroy(pthread_mutex_t *mutex)
168 if ((mutex == NULL) || (mutex->magic != _MUX_MAGIC)) {
171 ret = LOS_MuxDelete(mutex->handle);
175 mutex->handle = _MUX_INVALID_HANDLE;
176 mutex->magic = 0;
192 STATIC UINT32 MuxPreCheck(const pthread_mutex_t *mutex, const LosTaskCB *runTask)
194 if ((mutex == NULL) || (mutex->magic != _MUX_MAGIC) ||
195 ((mutex->handle != _MUX_INVALID_HANDLE) && (mutex->handle >= (UINT32)LOSCFG_BASE_IPC_MUX_LIMIT))) {
207 if (CheckMutexAttr(&mutex->stAttr) != LOS_OK) {
214 STATIC UINT32 MuxPendForPosix(pthread_mutex_t *mutex, UINT32 timeout)
220 UINT32 muxHandle = mutex->handle;
240 if ((muxPended->owner == runningTask) && (mutex->stAttr.type == PTHREAD_MUTEX_RECURSIVE)) {
276 STATIC UINT32 MuxPostForPosix(pthread_mutex_t *mutex)
282 UINT32 muxHandle = mutex->handle;
298 if ((--(muxPosted->muxCount) != 0) && (mutex->stAttr.type == PTHREAD_MUTEX_RECURSIVE)) {
329 int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *absTimeout)
341 ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet()));
349 if (mutex->handle == _MUX_INVALID_HANDLE) {
350 ret = LOS_MuxCreate(&mutex->handle);
355 OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
358 muxPended = GET_MUX(mutex->handle);
359 if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) &&
374 ret = MuxPendForPosix(mutex, timeout);
379 /* Lock mutex, waiting for it if necessary. */
380 int pthread_mutex_lock(pthread_mutex_t *mutex)
391 ret = MuxPreCheck(mutex, runTask);
396 if (mutex->handle == _MUX_INVALID_HANDLE) {
397 ret = LOS_MuxCreate(&mutex->handle);
402 OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
405 muxPended = GET_MUX(mutex->handle);
406 if ((mutex->stAttr.type == PTHREAD_MUTEX_ERRORCHECK) &&
412 ret = MuxPendForPosix(mutex, LOS_WAIT_FOREVER);
417 int pthread_mutex_trylock(pthread_mutex_t *mutex)
426 ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet()));
431 if (mutex->handle == _MUX_INVALID_HANDLE) {
432 ret = LOS_MuxCreate(&mutex->handle);
437 OsSetMutexCreateInfo(GET_MUX(mutex->handle), regLR);
440 muxPended = GET_MUX(mutex->handle);
441 if ((mutex->stAttr.type != PTHREAD_MUTEX_RECURSIVE) && (muxPended->muxCount != 0)) {
445 ret = MuxPendForPosix(mutex, 0);
450 int pthread_mutex_unlock(pthread_mutex_t *mutex)
453 ret = MuxPreCheck(mutex, OS_TCB_FROM_TID(LOS_CurTaskIDGet()));
458 if (mutex->handle == _MUX_INVALID_HANDLE) {
462 ret = MuxPostForPosix(mutex);