diff options
author | Richard Braun <rbraun@sceen.net> | 2017-08-27 16:55:36 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-08-27 16:55:36 +0200 |
commit | 50c583b698c4d1d13d1c0537c350691b18dd7033 (patch) | |
tree | 2745b01aea67d3559712b19a4376b2bad2232137 /kern/semaphore.h | |
parent | a509d86280d14b435640c446d81d85e53fd866e9 (diff) |
kern/semaphore: implement timed waits
Diffstat (limited to 'kern/semaphore.h')
-rw-r--r-- | kern/semaphore.h | 15 |
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. * |