[components/libc/posix]fix the problem that it doesn't check if barrier still in use and dosen't destory the mutex either.

This commit is contained in:
ligr 2024-11-21 11:16:21 +08:00 committed by Meco Man
parent 0bac8c4f90
commit bb0a1ea453
1 changed files with 24 additions and 0 deletions

View File

@ -86,6 +86,30 @@ int pthread_barrier_destroy(pthread_barrier_t *barrier)
if (!barrier)
return EINVAL;
/* Lock the internal mutex to safely check the barrier's state*/
result = pthread_mutex_lock(&(barrier->mutex));
if (result != 0)
return result;
/* Check if any threads are currently waiting on the barrier*/
if (barrier->count != 0)
{
pthread_mutex_unlock(&(barrier->mutex));
return EBUSY; /* Threads are still waiting*/
}
/* Free resources associated with the barrier*/
result = pthread_mutex_unlock(&(barrier->mutex));
if (result != 0)
{
return result; /* Return mutex unlock error*/
}
result = pthread_mutex_destroy(&(barrier->mutex));
if (result != 0)
{
return result; /* Return mutex destroy error*/
}
result = pthread_cond_destroy(&(barrier->cond));
return result;