blob: e311453cb91a5fb43a902e145206d00700863301 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
#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
|