From 8cda61ab7fe436075a7d93306819a609de80c4a0 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 23 Jul 2025 08:28:51 +0100 Subject: fix: sem: fix decrement logic of the semaphore api's 'rtl_sem_wait' Signed-off-by: Amlal El Mahrouss --- dev/kernel/KernelKit/Semaphore.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'dev/kernel/KernelKit') diff --git a/dev/kernel/KernelKit/Semaphore.h b/dev/kernel/KernelKit/Semaphore.h index 686ce1c9..618a3268 100644 --- a/dev/kernel/KernelKit/Semaphore.h +++ b/dev/kernel/KernelKit/Semaphore.h @@ -67,11 +67,6 @@ inline BOOL rtl_sem_wait(Semaphore& sem, UInt64 owner, UInt64 timeout, BOOL* con return FALSE; } - if (sem[kSemaphoreCountIndex] <= 0) { - err_global_get() = kErrorNetworkTimeout; - return FALSE; - } - if (timeout <= 0) { err_global_get() = kErrorNetworkTimeout; @@ -79,6 +74,11 @@ inline BOOL rtl_sem_wait(Semaphore& sem, UInt64 owner, UInt64 timeout, BOOL* con } if (!condition || *condition) { + if (sem[kSemaphoreCountIndex] == 0) { + err_global_get() = kErrorNetworkTimeout; + return FALSE; + } + err_global_get() = kErrorSuccess; sem[kSemaphoreCountIndex]--; @@ -90,6 +90,11 @@ inline BOOL rtl_sem_wait(Semaphore& sem, UInt64 owner, UInt64 timeout, BOOL* con if (ret) { if (!condition || *condition) { + if (sem[kSemaphoreCountIndex] == 0) { + err_global_get() = kErrorNetworkTimeout; + return FALSE; + } + err_global_get() = kErrorSuccess; sem[kSemaphoreCountIndex]--; -- cgit v1.2.3