pthread_mutex:add deadlock assert
Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
parent
ff24fc425e
commit
112cc083d3
@ -71,6 +71,41 @@ static void pthread_mutex_add(FAR struct pthread_mutex_s *mutex)
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: pthread_mutex_check
|
||||
*
|
||||
* Description:
|
||||
* Verify that the mutex is not in the list of mutexes held by
|
||||
* this pthread.
|
||||
*
|
||||
* Input Parameters:
|
||||
* mutex - The mutex to be locked
|
||||
*
|
||||
* Returned Value:
|
||||
* None
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_DEBUG_ASSERTIONS
|
||||
static void pthread_mutex_check(FAR struct pthread_mutex_s *mutex)
|
||||
{
|
||||
FAR struct tcb_s *tcb = this_task();
|
||||
irqstate_t flags = enter_critical_section();
|
||||
FAR struct pthread_mutex_s *cur;
|
||||
|
||||
DEBUGASSERT(mutex != NULL);
|
||||
for (cur = tcb->mhead; cur != NULL; cur = cur->flink)
|
||||
{
|
||||
/* The mutex should not be in the list of mutexes held by this task */
|
||||
|
||||
DEBUGASSERT(cur != mutex);
|
||||
}
|
||||
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: pthread_mutex_remove
|
||||
*
|
||||
@ -145,9 +180,6 @@ int pthread_mutex_take(FAR struct pthread_mutex_s *mutex,
|
||||
{
|
||||
int ret = EINVAL;
|
||||
|
||||
/* Verify input parameters */
|
||||
|
||||
DEBUGASSERT(mutex != NULL);
|
||||
if (mutex != NULL)
|
||||
{
|
||||
/* Make sure that no unexpected context switches occur */
|
||||
@ -197,6 +229,9 @@ int pthread_mutex_take(FAR struct pthread_mutex_s *mutex,
|
||||
|
||||
else if (!mutex_is_recursive(&mutex->mutex))
|
||||
{
|
||||
#ifdef CONFIG_DEBUG_ASSERTIONS
|
||||
pthread_mutex_check(mutex);
|
||||
#endif
|
||||
pthread_mutex_add(mutex);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user