• Home
  • Raw
  • Download

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