Ignore:
File:
1 edited

Legend:

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

    rd314571 r111b9b9  
    4141#include <adt/list.h>
    4242
    43 typedef enum {
    44         WAKEUP_FIRST = 0,
    45         WAKEUP_ALL
    46 } wakeup_mode_t;
    47 
    4843/** Wait queue structure.
    4944 *
     
    5752
    5853        /**
    59          * Number of waitq_wakeup() calls that didn't find a thread to wake up.
    60          *
     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.
    6156         */
    62         int missed_wakeups;
    63 
    64         /** Number of wakeups that need to be ignored due to futex timeout. */
    65         int ignore_wakeups;
     57        int wakeup_balance;
    6658
    6759        /** List of sleeping threads for which there was no missed_wakeup. */
    6860        list_t sleepers;
     61
     62        bool closed;
    6963} waitq_t;
    7064
    71 #define waitq_sleep(wq) \
    72         waitq_sleep_timeout((wq), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE, NULL)
     65typedef struct wait_guard {
     66        ipl_t ipl;
     67} wait_guard_t;
    7368
    7469struct thread;
    7570
    7671extern void waitq_initialize(waitq_t *);
    77 extern errno_t waitq_sleep_timeout(waitq_t *, uint32_t, unsigned int, bool *);
    78 extern ipl_t waitq_sleep_prepare(waitq_t *);
    79 extern errno_t waitq_sleep_timeout_unsafe(waitq_t *, uint32_t, unsigned int, bool *);
    80 extern void waitq_sleep_finish(waitq_t *, bool, ipl_t);
    81 extern void waitq_wakeup(waitq_t *, wakeup_mode_t);
    82 extern void _waitq_wakeup_unsafe(waitq_t *, wakeup_mode_t);
    83 extern void waitq_interrupt_sleep(struct thread *);
    84 extern int waitq_count_get(waitq_t *);
    85 extern void waitq_count_set(waitq_t *, int val);
     72extern void waitq_initialize_with_count(waitq_t *, int);
     73extern errno_t waitq_sleep(waitq_t *);
     74extern errno_t _waitq_sleep_timeout(waitq_t *, uint32_t, unsigned int);
     75extern errno_t waitq_sleep_timeout(waitq_t *, uint32_t);
     76extern wait_guard_t waitq_sleep_prepare(waitq_t *);
     77extern errno_t waitq_sleep_unsafe(waitq_t *, wait_guard_t);
     78extern errno_t waitq_sleep_timeout_unsafe(waitq_t *, uint32_t, unsigned int, wait_guard_t);
     79
     80extern void waitq_wake_one(waitq_t *);
     81extern void waitq_wake_all(waitq_t *);
     82extern void waitq_signal(waitq_t *);
     83extern void waitq_close(waitq_t *);
    8684
    8785#endif
Note: See TracChangeset for help on using the changeset viewer.