From b3eb55ec9a9703a9443a8e81761997ba036b7db3 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 14 Apr 2021 22:54:33 +0200 Subject: [PATCH] LibPthread: Implement sem_getvalue() --- Userland/Libraries/LibPthread/semaphore.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibPthread/semaphore.cpp b/Userland/Libraries/LibPthread/semaphore.cpp index d42964103e..c678774350 100644 --- a/Userland/Libraries/LibPthread/semaphore.cpp +++ b/Userland/Libraries/LibPthread/semaphore.cpp @@ -51,9 +51,25 @@ int sem_destroy(sem_t* sem) return 0; } -int sem_getvalue(sem_t*, int*) +int sem_getvalue(sem_t* sem, int* sval) { - VERIFY_NOT_REACHED(); + auto rc = pthread_mutex_trylock(&sem->mtx); + + if (rc == EBUSY) { + *sval = 0; + return 0; + } + + if (rc != 0) { + errno = rc; + return -1; + } + + *sval = sem->value; + + pthread_mutex_unlock(&sem->mtx); + + return 0; } int sem_init(sem_t* sem, int shared, unsigned int value)