Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/synch/waitq.h

    r111b9b9 rd314571  
    4141#include <adt/list.h>
    4242
     43typedef enum {
     44        WAKEUP_FIRST = 0,
     45        WAKEUP_ALL
     46} wakeup_mode_t;
     47
    4348/** Wait queue structure.
    4449 *
     
    5257
    5358        /**
    54          * If negative, number of wakeups that are to be ignored (necessary for futex operation).
    55          * If positive, number of wakeups that weren't able to wake a thread.
     59         * Number of waitq_wakeup() calls that didn't find a thread to wake up.
     60         *
    5661         */
    57         int wakeup_balance;
     62        int missed_wakeups;
     63
     64        /** Number of wakeups that need to be ignored due to futex timeout. */
     65        int ignore_wakeups;
    5866
    5967        /** List of sleeping threads for which there was no missed_wakeup. */
    6068        list_t sleepers;
    61 
    62         bool closed;
    6369} waitq_t;
    6470
    65 typedef struct wait_guard {
    66         ipl_t ipl;
    67 } wait_guard_t;
     71#define waitq_sleep(wq) \
     72        waitq_sleep_timeout((wq), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE, NULL)
    6873
    6974struct thread;
    7075
    7176extern void waitq_initialize(waitq_t *);
    72 extern void waitq_initialize_with_count(waitq_t *, int);
    73 extern errno_t waitq_sleep(waitq_t *);
    74 extern errno_t _waitq_sleep_timeout(waitq_t *, uint32_t, unsigned int);
    75 extern errno_t waitq_sleep_timeout(waitq_t *, uint32_t);
    76 extern wait_guard_t waitq_sleep_prepare(waitq_t *);
    77 extern errno_t waitq_sleep_unsafe(waitq_t *, wait_guard_t);
    78 extern errno_t waitq_sleep_timeout_unsafe(waitq_t *, uint32_t, unsigned int, wait_guard_t);
    79 
    80 extern void waitq_wake_one(waitq_t *);
    81 extern void waitq_wake_all(waitq_t *);
    82 extern void waitq_signal(waitq_t *);
    83 extern void waitq_close(waitq_t *);
     77extern errno_t waitq_sleep_timeout(waitq_t *, uint32_t, unsigned int, bool *);
     78extern ipl_t waitq_sleep_prepare(waitq_t *);
     79extern errno_t waitq_sleep_timeout_unsafe(waitq_t *, uint32_t, unsigned int, bool *);
     80extern void waitq_sleep_finish(waitq_t *, bool, ipl_t);
     81extern void waitq_wakeup(waitq_t *, wakeup_mode_t);
     82extern void _waitq_wakeup_unsafe(waitq_t *, wakeup_mode_t);
     83extern void waitq_interrupt_sleep(struct thread *);
     84extern int waitq_count_get(waitq_t *);
     85extern void waitq_count_set(waitq_t *, int val);
    8486
    8587#endif
Note: See TracChangeset for help on using the changeset viewer.