pthread_mutex:add deadlock assert

Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
anjiahao 2024-03-12 14:52:53 +08:00 committed by Xiang Xiao
parent ff24fc425e
commit 112cc083d3

View File

@ -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);
}
}