summaryrefslogtreecommitdiff
path: root/kern/semaphore.h
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-08-27 16:55:36 +0200
committerRichard Braun <rbraun@sceen.net>2017-08-27 16:55:36 +0200
commit50c583b698c4d1d13d1c0537c350691b18dd7033 (patch)
tree2745b01aea67d3559712b19a4376b2bad2232137 /kern/semaphore.h
parenta509d86280d14b435640c446d81d85e53fd866e9 (diff)
kern/semaphore: implement timed waits
Diffstat (limited to 'kern/semaphore.h')
-rw-r--r--kern/semaphore.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/kern/semaphore.h b/kern/semaphore.h
index e08927ec..e1acbf21 100644
--- a/kern/semaphore.h
+++ b/kern/semaphore.h
@@ -33,6 +33,7 @@
#define _KERN_SEMAPHORE_H
#include <assert.h>
+#include <stdint.h>
#include <kern/atomic.h>
#include <kern/error.h>
@@ -93,6 +94,20 @@ semaphore_wait(struct semaphore *semaphore)
}
}
+static inline int
+semaphore_timedwait(struct semaphore *semaphore, uint64_t ticks)
+{
+ unsigned int prev;
+
+ prev = semaphore_dec(semaphore);
+
+ if (unlikely(prev == 0)) {
+ return semaphore_timedwait_slow(semaphore, ticks);
+ }
+
+ return 0;
+}
+
/*
* Unlock a semaphore.
*