[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:
parent
0bac8c4f90
commit
bb0a1ea453
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue