提交 712c0673 编写于 作者: B Bernard Xiong

[pthreads] Fix the phread_mutex_trylock issue for not recursive mutex.

上级 4730a45a
...@@ -232,6 +232,7 @@ RTM_EXPORT(pthread_mutex_unlock); ...@@ -232,6 +232,7 @@ RTM_EXPORT(pthread_mutex_unlock);
int pthread_mutex_trylock(pthread_mutex_t *mutex) int pthread_mutex_trylock(pthread_mutex_t *mutex)
{ {
rt_err_t result; rt_err_t result;
int mtype;
if (!mutex) if (!mutex)
return EINVAL; return EINVAL;
...@@ -241,11 +242,20 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex) ...@@ -241,11 +242,20 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex)
pthread_mutex_init(mutex, RT_NULL); pthread_mutex_init(mutex, RT_NULL);
} }
mtype = mutex->attr & MUTEXATTR_TYPE_MASK;
rt_enter_critical();
if (mutex->lock.owner == rt_thread_self() &&
mtype != PTHREAD_MUTEX_RECURSIVE)
{
rt_exit_critical();
return EDEADLK;
}
rt_exit_critical();
result = rt_mutex_take(&(mutex->lock), 0); result = rt_mutex_take(&(mutex->lock), 0);
if (result == RT_EOK) if (result == RT_EOK) return 0;
return 0;
return EBUSY; return EBUSY;
} }
RTM_EXPORT(pthread_mutex_trylock); RTM_EXPORT(pthread_mutex_trylock);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册