blob: e311453cb91a5fb43a902e145206d00700863301 [file] [log] [blame]
#ifndef _WAITER_H_
#define _WAITER_H_
/** Waiter type. */
struct waiter;
/** Create a new waiter.
* @return Newly created waiter on success, NULL on failure.
*/
struct waiter *waiter_create(void);
/** Destroy existing waiter.
* @param w waiter to destroy.
*/
void waiter_destroy(struct waiter *w);
/** Wait for next ticket.
* @param w waiter.
*/
void waiter_wait(struct waiter *w);
/** Wait for next ticket or timeout.
* @param w waiter.
* @param ms timeout in milliseconds.
* @return 0 on ticket; !0 on timeout.
*/
int waiter_wait_timeout(struct waiter *w, unsigned int ms);
/** Synchronize timer-based tickets.
* @param w waiter.
*/
void waiter_synchronize(struct waiter *w);
/** Waiter ticket type. */
struct waiter_ticket;
/** Add a null wait ticket to pool.
* @param w waiter
* @return wait ticket on success; NULL on failure.
*/
struct waiter_ticket *waiter_add_null(struct waiter *w);
/** Add a file descriptor to the pool.
* @param w waiter.
* @param fd file descriptor.
* @return wait ticket on success; NULL on failure.
*/
struct waiter_ticket *waiter_add_fd(struct waiter *w, int fd);
/** Add a timeout to the pool.
* @param w waiter.
* @param ms duration of timeout in milliseconds.
* @return wait ticket on success; NULL on failure.
*/
struct waiter_ticket *waiter_add_timeout(struct waiter *w, unsigned int ms);
/** Set ticket type to null.
* @param tkt wait ticket.
*/
void waiter_ticket_set_null(struct waiter_ticket *tkt);
/** Set ticket type to file descriptor.
* @param tkt wait ticket.
* @param fd file descriptor.
*/
void waiter_ticket_set_fd(struct waiter_ticket *tkt, int fd);
/** Set ticket type to timeout.
* @param tkt wait ticket.
* @param ms timeout in milliseconds.
*/
void waiter_ticket_set_timeout(struct waiter_ticket *tkt, unsigned int ms);
/** Destroy ticket.
* @param tkt wait ticket.
*/
void waiter_ticket_delete(struct waiter_ticket *tkt);
/** Check to see if ticket has triggered.
* @param tkt wait ticket.
* @return 0 if triggered, !0 otherwise.
*/
int waiter_ticket_check(const struct waiter_ticket *tkt);
/** Clear ticket trigger status.
* @param tkt wait ticket.
* @return 0 if triggered, !0 otherwise.
*/
int waiter_ticket_clear(struct waiter_ticket *tkt);
/** Wait ticket callback function type. */
typedef void (* waiter_ticket_cb_t)(void *, struct waiter_ticket *);
/** Register callback function for ticket trigger.
* @param tkt wait ticket.
* @param cb_fn callback function.
* @param data private data to pass to callback function.
*/
void waiter_ticket_callback(struct waiter_ticket *tkt,
waiter_ticket_cb_t cb_fn, void *data);
#endif