From 3978ac0540a7e430a4a2a157d2e53653b5c37bd0 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 23 Jul 2025 08:25:39 +0100 Subject: feat: rtl_sem_wait: check semaphore for underflows. Signed-off-by: Amlal El Mahrouss --- dev/kernel/KernelKit/Semaphore.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'dev/kernel/KernelKit') diff --git a/dev/kernel/KernelKit/Semaphore.h b/dev/kernel/KernelKit/Semaphore.h index 0d2b84da..686ce1c9 100644 --- a/dev/kernel/KernelKit/Semaphore.h +++ b/dev/kernel/KernelKit/Semaphore.h @@ -19,13 +19,9 @@ #define kSemaphoreCount (2) -#define kSemaphoreIncrementOwner(sem) \ - (sem[kSemaphoreOwnerIndex]++) - - -#define kSemaphoreDecrementOwner(sem) \ - (sem[kSemaphoreOwnerIndex]--) +#define kSemaphoreIncrementOwner(sem) (sem[kSemaphoreOwnerIndex]++) +#define kSemaphoreDecrementOwner(sem) (sem[kSemaphoreOwnerIndex]--) namespace Kernel { /// @brief Semaphore structure used for synchronization. @@ -71,6 +67,11 @@ 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; -- cgit v1.2.3