[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)
|
if (!barrier)
|
||||||
return EINVAL;
|
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));
|
result = pthread_cond_destroy(&(barrier->cond));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Reference in New Issue