Amit Pundir | d477f82 | 2020-02-07 22:26:08 +0530 | [diff] [blame] | 1 | #ifndef _WAITER_H_ |
| 2 | #define _WAITER_H_ |
| 3 | |
| 4 | /** Waiter type. */ |
| 5 | struct waiter; |
| 6 | |
| 7 | /** Create a new waiter. |
| 8 | * @return Newly created waiter on success, NULL on failure. |
| 9 | */ |
| 10 | struct waiter *waiter_create(void); |
| 11 | |
| 12 | /** Destroy existing waiter. |
| 13 | * @param w waiter to destroy. |
| 14 | */ |
| 15 | void waiter_destroy(struct waiter *w); |
| 16 | |
| 17 | /** Wait for next ticket. |
| 18 | * @param w waiter. |
| 19 | */ |
| 20 | void waiter_wait(struct waiter *w); |
| 21 | |
| 22 | /** Wait for next ticket or timeout. |
| 23 | * @param w waiter. |
| 24 | * @param ms timeout in milliseconds. |
| 25 | * @return 0 on ticket; !0 on timeout. |
| 26 | */ |
| 27 | int waiter_wait_timeout(struct waiter *w, unsigned int ms); |
| 28 | |
| 29 | /** Synchronize timer-based tickets. |
| 30 | * @param w waiter. |
| 31 | */ |
| 32 | void waiter_synchronize(struct waiter *w); |
| 33 | |
| 34 | /** Waiter ticket type. */ |
| 35 | struct waiter_ticket; |
| 36 | |
| 37 | /** Add a null wait ticket to pool. |
| 38 | * @param w waiter |
| 39 | * @return wait ticket on success; NULL on failure. |
| 40 | */ |
| 41 | struct waiter_ticket *waiter_add_null(struct waiter *w); |
| 42 | |
| 43 | /** Add a file descriptor to the pool. |
| 44 | * @param w waiter. |
| 45 | * @param fd file descriptor. |
| 46 | * @return wait ticket on success; NULL on failure. |
| 47 | */ |
| 48 | struct waiter_ticket *waiter_add_fd(struct waiter *w, int fd); |
| 49 | |
| 50 | /** Add a timeout to the pool. |
| 51 | * @param w waiter. |
| 52 | * @param ms duration of timeout in milliseconds. |
| 53 | * @return wait ticket on success; NULL on failure. |
| 54 | */ |
| 55 | struct waiter_ticket *waiter_add_timeout(struct waiter *w, unsigned int ms); |
| 56 | |
| 57 | /** Set ticket type to null. |
| 58 | * @param tkt wait ticket. |
| 59 | */ |
| 60 | void waiter_ticket_set_null(struct waiter_ticket *tkt); |
| 61 | |
| 62 | /** Set ticket type to file descriptor. |
| 63 | * @param tkt wait ticket. |
| 64 | * @param fd file descriptor. |
| 65 | */ |
| 66 | void waiter_ticket_set_fd(struct waiter_ticket *tkt, int fd); |
| 67 | |
| 68 | /** Set ticket type to timeout. |
| 69 | * @param tkt wait ticket. |
| 70 | * @param ms timeout in milliseconds. |
| 71 | */ |
| 72 | void waiter_ticket_set_timeout(struct waiter_ticket *tkt, unsigned int ms); |
| 73 | |
| 74 | /** Destroy ticket. |
| 75 | * @param tkt wait ticket. |
| 76 | */ |
| 77 | void waiter_ticket_delete(struct waiter_ticket *tkt); |
| 78 | |
| 79 | /** Check to see if ticket has triggered. |
| 80 | * @param tkt wait ticket. |
| 81 | * @return 0 if triggered, !0 otherwise. |
| 82 | */ |
| 83 | int waiter_ticket_check(const struct waiter_ticket *tkt); |
| 84 | |
| 85 | |
| 86 | /** Clear ticket trigger status. |
| 87 | * @param tkt wait ticket. |
| 88 | * @return 0 if triggered, !0 otherwise. |
| 89 | */ |
| 90 | int waiter_ticket_clear(struct waiter_ticket *tkt); |
| 91 | |
| 92 | /** Wait ticket callback function type. */ |
| 93 | typedef void (* waiter_ticket_cb_t)(void *, struct waiter_ticket *); |
| 94 | |
| 95 | /** Register callback function for ticket trigger. |
| 96 | * @param tkt wait ticket. |
| 97 | * @param cb_fn callback function. |
| 98 | * @param data private data to pass to callback function. |
| 99 | */ |
| 100 | void waiter_ticket_callback(struct waiter_ticket *tkt, |
| 101 | waiter_ticket_cb_t cb_fn, void *data); |
| 102 | |
| 103 | #endif |