diff options
Diffstat (limited to 'src/kernel/KernelKit/Semaphore.h')
| -rw-r--r-- | src/kernel/KernelKit/Semaphore.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/kernel/KernelKit/Semaphore.h b/src/kernel/KernelKit/Semaphore.h index bb6b9ba9..4dc9a454 100644 --- a/src/kernel/KernelKit/Semaphore.h +++ b/src/kernel/KernelKit/Semaphore.h @@ -29,6 +29,7 @@ using SemaphoreArr = UInt64[kSemaphoreCount]; /// @brief Checks if the semaphore is valid. inline bool rtl_sem_is_valid(const SemaphoreArr& sem, const UInt64& owner = 0) { + if (!sem) return false; return sem[kSemaphoreOwnerIndex] == owner && sem[kSemaphoreCountIndex] > 0; } @@ -36,6 +37,8 @@ inline bool rtl_sem_is_valid(const SemaphoreArr& sem, const UInt64& owner = 0) { /// @param sem /// @return inline bool rtl_sem_release(SemaphoreArr& sem) { + if (!sem) return false; + sem[kSemaphoreOwnerIndex] = 0; sem[kSemaphoreCountIndex] = 0; @@ -47,6 +50,8 @@ inline bool rtl_sem_release(SemaphoreArr& sem) { /// @param owner the owner to set, could be anything identifitable. /// @return inline bool rtl_sem_acquire(SemaphoreArr& sem, const UInt64& owner) { + if (!sem) return false; + if (!owner) { err_global_get() = kErrorInvalidData; return false; // Invalid owner, return false and set KPC. @@ -65,6 +70,8 @@ inline bool rtl_sem_acquire(SemaphoreArr& sem, const UInt64& owner) { /// @return inline bool rtl_sem_wait(SemaphoreArr& sem, const UInt64& owner, const UInt64& timeout, bool& condition) { + if (!sem) return false; + if (!rtl_sem_is_valid(sem, owner)) { return false; } |
