diff --git a/libs/libc/pthread/pthread_barrierdestroy.c b/libs/libc/pthread/pthread_barrierdestroy.c index ca10b652afd..c9192e485ca 100644 --- a/libs/libc/pthread/pthread_barrierdestroy.c +++ b/libs/libc/pthread/pthread_barrierdestroy.c @@ -77,6 +77,7 @@ int pthread_barrier_destroy(FAR pthread_barrier_t *barrier) { int ret = OK; + int semcount; if (!barrier) { @@ -84,8 +85,16 @@ int pthread_barrier_destroy(FAR pthread_barrier_t *barrier) } else { - sem_destroy(&barrier->sem); - barrier->count = 0; + nxsem_get_value(&barrier->sem, &semcount); + if (semcount == 0) + { + sem_destroy(&barrier->sem); + barrier->count = 0; + } + else + { + ret = EBUSY; + } } return ret; diff --git a/libs/libc/pthread/pthread_barrierinit.c b/libs/libc/pthread/pthread_barrierinit.c index 0590feff342..e39a77d9ff0 100644 --- a/libs/libc/pthread/pthread_barrierinit.c +++ b/libs/libc/pthread/pthread_barrierinit.c @@ -88,6 +88,7 @@ int pthread_barrier_init(FAR pthread_barrier_t *barrier, FAR const pthread_barrierattr_t *attr, unsigned int count) { int ret = OK; + int semcount; if (!barrier || count == 0) { @@ -95,8 +96,16 @@ int pthread_barrier_init(FAR pthread_barrier_t *barrier, } else { - sem_init(&barrier->sem, 0, 0); - barrier->count = count; + nxsem_get_value(&barrier->sem, &semcount); + if (semcount == 0) + { + sem_init(&barrier->sem, 0, 0); + barrier->count = count; + } + else + { + ret = EBUSY; + } } return ret;