X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fevent.h;h=31c326be141f37177d636b1dbfd7e65af7f8f3c4;hp=cf3c70a163b531b331bef39a9b797d8cff53d875;hb=963c5055505f2fc117cd5efa06eaa02c9b2bf85d;hpb=61d9b04f66055e61f0afdf8955ff890f4da39288 diff --git a/src/event.h b/src/event.h index cf3c70a1..31c326be 100644 --- a/src/event.h +++ b/src/event.h @@ -32,58 +32,59 @@ typedef struct event_loop_t event_loop_t; typedef void (*io_cb_t)(event_loop_t *loop, void *data, int flags); typedef void (*timeout_cb_t)(event_loop_t *loop, void *data); typedef void (*signal_cb_t)(event_loop_t *loop, void *data); -typedef struct timeval(*idle_cb_t)(event_loop_t *loop, void *data); +typedef struct timespec(*idle_cb_t)(event_loop_t *loop, void *data); typedef struct io_t { + struct splay_node_t node; int fd; int flags; io_cb_t cb; void *data; - struct splay_node_t node; } io_t; typedef struct timeout_t { - struct timeval tv; + struct splay_node_t node; + struct timespec tv; timeout_cb_t cb; void *data; - struct splay_node_t node; } timeout_t; typedef struct signal_t { + struct splay_node_t node; int signum; + bool set; signal_cb_t cb; void *data; - struct splay_node_t node; } signal_t; struct event_loop_t { - fd_set readfds; - fd_set writefds; + void *data; volatile bool running; - struct timeval now; bool deletion; - splay_tree_t ios; - splay_tree_t timeouts; - splay_tree_t signals; + struct timespec now; + splay_tree_t timeouts; idle_cb_t idle_cb; void *idle_data; + splay_tree_t ios; + splay_tree_t signals; + + fd_set readfds; + fd_set writefds; io_t signalio; int pipefd[2]; - - void *data; }; extern void io_add(event_loop_t *loop, io_t *io, io_cb_t cb, void *data, int fd, int flags); extern void io_del(event_loop_t *loop, io_t *io); extern void io_set(event_loop_t *loop, io_t *io, int flags); -extern void timeout_add(event_loop_t *loop, timeout_t *timeout, timeout_cb_t cb, void *data, struct timeval *tv); +extern void timeout_add(event_loop_t *loop, timeout_t *timeout, timeout_cb_t cb, void *data, struct timespec *tv); extern void timeout_del(event_loop_t *loop, timeout_t *timeout); -extern void timeout_set(event_loop_t *loop, timeout_t *timeout, struct timeval *tv); +extern void timeout_set(event_loop_t *loop, timeout_t *timeout, struct timespec *tv); extern void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void *data, uint8_t signum); extern void signal_trigger(event_loop_t *loop, signal_t *sig); @@ -93,7 +94,7 @@ extern void idle_set(event_loop_t *loop, idle_cb_t cb, void *data); extern void event_loop_init(event_loop_t *loop); extern void event_loop_exit(event_loop_t *loop); -extern bool event_loop_run(event_loop_t *loop, pthread_mutex_t *mutex); +extern bool event_loop_run(event_loop_t *loop, pthread_mutex_t *mutex) __attribute__((__warn_unused_result__)); extern void event_loop_flush_output(event_loop_t *loop); extern void event_loop_start(event_loop_t *loop); extern void event_loop_stop(event_loop_t *loop);