Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/private/futex.h

    r0b8fad2 r42da5ed  
    4242#include <time.h>
    4343#include <fibril.h>
    44 #include <abi/cap.h>
    45 #include <abi/synch.h>
    4644
    4745typedef struct futex {
    4846        volatile atomic_int val;
    49         volatile cap_waitq_handle_t whandle;
    50 
    5147#ifdef CONFIG_DEBUG_FUTEX
    5248        _Atomic(fibril_t *) owner;
     
    5450} futex_t;
    5551
    56 extern errno_t futex_initialize(futex_t *futex, int value);
    57 
    58 static inline errno_t futex_destroy(futex_t *futex)
    59 {
    60         if (futex->whandle) {
    61                 errno_t rc;
    62                 rc = __SYSCALL1(SYS_WAITQ_DESTROY, (sysarg_t) futex->whandle);
    63                 futex->whandle = CAP_NIL;
    64                 return rc;
    65         }
    66         return EOK;
    67 }
     52extern void futex_initialize(futex_t *futex, int value);
    6853
    6954#ifdef CONFIG_DEBUG_FUTEX
     55
     56#define FUTEX_INITIALIZE(val) { (val) , NULL }
     57#define FUTEX_INITIALIZER     FUTEX_INITIALIZE(1)
    7058
    7159void __futex_assert_is_locked(futex_t *, const char *);
     
    8674#else
    8775
     76#define FUTEX_INITIALIZE(val) { (val) }
     77#define FUTEX_INITIALIZER     FUTEX_INITIALIZE(1)
     78
    8879#define futex_lock(fut)     (void) futex_down((fut))
    8980#define futex_trylock(fut)  futex_trydown((fut))
     
    9586
    9687#endif
    97 
    98 static inline errno_t futex_allocate_waitq(futex_t *futex)
    99 {
    100         return __SYSCALL1(SYS_WAITQ_CREATE, (sysarg_t) &futex->whandle);
    101 }
    10288
    10389/** Down the futex with timeout, composably.
     
    121107{
    122108        // TODO: Add tests for this.
    123 
    124         assert(futex->whandle != CAP_NIL);
    125109
    126110        if (atomic_fetch_sub_explicit(&futex->val, 1, memory_order_acquire) > 0)
     
    148132        }
    149133
    150         return __SYSCALL3(SYS_WAITQ_SLEEP, (sysarg_t) futex->whandle,
    151             (sysarg_t) timeout, (sysarg_t) SYNCH_FLAGS_FUTEX);
     134        return __SYSCALL2(SYS_FUTEX_SLEEP, (sysarg_t) futex, (sysarg_t) timeout);
    152135}
    153136
     
    164147{
    165148        if (atomic_fetch_add_explicit(&futex->val, 1, memory_order_release) < 0)
    166                 return __SYSCALL1(SYS_WAITQ_WAKEUP, (sysarg_t) futex->whandle);
     149                return __SYSCALL1(SYS_FUTEX_WAKEUP, (sysarg_t) futex);
    167150
    168151        return EOK;
Note: See TracChangeset for help on using the changeset viewer.