summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/KernelKit/Semaphore.h15
1 files changed, 10 insertions, 5 deletions
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]--;