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); 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 * Name: pthread_mutex_remove
* *
@ -145,9 +180,6 @@ int pthread_mutex_take(FAR struct pthread_mutex_s *mutex,
{ {
int ret = EINVAL; int ret = EINVAL;
/* Verify input parameters */
DEBUGASSERT(mutex != NULL);
if (mutex != NULL) if (mutex != NULL)
{ {
/* Make sure that no unexpected context switches occur */ /* 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)) else if (!mutex_is_recursive(&mutex->mutex))
{ {
#ifdef CONFIG_DEBUG_ASSERTIONS
pthread_mutex_check(mutex);
#endif
pthread_mutex_add(mutex); pthread_mutex_add(mutex);
} }
} }